---
# System prepended metadata

title: Untitled

---

## OpenTelemetry
[OpenTelemetry](https://opentelemetry.io/docs/)是一個開源的Telemetry框架，旨在為現代雲原生應用程式提供可觀測性。它提供了一組工具和API，可用於收集、傳輸和分析分佈式應用程式的數據。

OpenTelemetry具有以下特點：

1. 可擴展性 - OpenTelemetry可與多種編程語言和框架整合，並支援多種數據傳輸協議，如Jaeger、Zipkin、Prometheus等等。

2. 自定義 - OpenTelemetry允許開發者自定義數據收集和分析方式，以滿足特定的需求和環境。

3. 無縫集成 - OpenTelemetry可以集成到現有的Telemetry工具和系統中，如Prometheus、Grafana、Azure Application Insights等等。

4. 標準化 - OpenTelemetry的API和數據模型是開放的和標準化的，可以與其他Telemetry工具和服務進行互操作。

使用OpenTelemetry可以幫助開發者更好地了解他們的應用程式的性能和使用情況，並提供實時和歷史數據的可視化和分析。它還可以幫助開發者更快地診斷和解決問題，以提高應用程式的可靠性和效率。

總之，OpenTelemetry是一個強大而靈活的Telemetry框架，可用於收集和分析分佈式應用程式的數據。它可以幫助開發者更好地了解他們的應用程式，以便進行改進和優化。

## Example
在React應用程式中使用OpenTelemetry可以透過在應用程式的根組件中創建TracerProvider並將其設置為全局提供程序，然後在需要的地方使用Tracer對象創建Span。

以下是一個簡單的React組件，演示如何使用OpenTelemetry記錄按鈕點擊事件：


```=javascript
import React, { useContext } from 'react';
import { TracerProvider, SimpleSpanProcessor } from '@opentelemetry/tracing';
import { CollectorTraceExporter } from '@opentelemetry/exporter-collector-proto';

const exporter = new CollectorTraceExporter({
  url: 'https://your-collector-endpoint.com/v1/trace',
});

const provider = new TracerProvider({
  spanProcessor: new SimpleSpanProcessor(exporter),
});

provider.register();

const TracerContext = React.createContext(provider.getTracer('my-react-app'));

function MyButton() {
  const tracer = useContext(TracerContext);

  const handleClick = () => {
    const span = tracer.startSpan('button-click');
    // Do some work here
    span.end();
  };

  return (
    <button onClick={handleClick}>Click me!</button>
  );
}

function App() {
  return (
    <div>
      <TracerContext.Provider>
        <MyButton />
      </TracerContext.Provider>
    </div>
  );
}

export default App;

```

## ELK integration

https://www.elastic.co/guide/en/apm/guide/current/open-telemetry.html