|
1 | | ---- |
2 | | - |
3 | | -<p align="center"> |
4 | | - <strong> |
5 | | - <a href="https://opentelemetry.io/docs/collector/about/">Getting Started<a/> |
6 | | - • |
7 | | - <a href="https://github.com/open-telemetry/community#agentcollector">Getting Involved<a/> |
8 | | - • |
9 | | - <a href="https://gitter.im/open-telemetry/opentelemetry-service">Getting In Touch<a/> |
10 | | - </strong> |
11 | | -</p> |
12 | | - |
13 | | -<p align="center"> |
14 | | - <a href="https://goreportcard.com/report/github.com/open-telemetry/opentelemetry-collector"> |
15 | | - <img alt="Go Report Card" src="https://goreportcard.com/badge/github.com/open-telemetry/opentelemetry-collector?style=for-the-badge"> |
16 | | - </a> |
17 | | - <a href="https://circleci.com/gh/open-telemetry/opentelemetry-collector"> |
18 | | - <img alt="Build Status" src="https://img.shields.io/circleci/build/github/open-telemetry/opentelemetry-collector?style=for-the-badge"> |
19 | | - </a> |
20 | | - <a href="https://codecov.io/gh/open-telemetry/opentelemetry-collector/branch/master/"> |
21 | | - <img alt="Codecov Status" src="https://img.shields.io/codecov/c/github/open-telemetry/opentelemetry-collector?style=for-the-badge"> |
22 | | - </a> |
23 | | - <a href="releases"> |
24 | | - <img alt="GitHub release (latest by date including pre-releases)" src="https://img.shields.io/github/v/release/open-telemetry/opentelemetry-collector?include_prereleases&style=for-the-badge"> |
25 | | - </a> |
26 | | - <img alt="Beta" src="https://img.shields.io/badge/status-beta-informational?style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAIRlWElmTU0AKgAAAAgABQESAAMAAAABAAEAAAEaAAUAAAABAAAASgEbAAUAAAABAAAAUgEoAAMAAAABAAIAAIdpAAQAAAABAAAAWgAAAAAAAACQAAAAAQAAAJAAAAABAAOgAQADAAAAAQABAACgAgAEAAAAAQAAABigAwAEAAAAAQAAABgAAAAA8A2UOAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAAVlpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4KTMInWQAABK5JREFUSA2dVm1sFEUYfmd2b/f2Pkqghn5eEQWKrRgjpkYgpoRCLC0oxV5apAiGUDEpJvwxEQ2raWPU+Kf8INU/RtEedwTCR9tYPloxGNJYTTQUwYqJ1aNpaLH3sXu3t7vjvFevpSqt7eSyM+/czvM8877PzB3APBoLgoDLsNePF56LBwqa07EKlDGg84CcWsI4CEbhNnDpAd951lXE2NkiNknCCTLv4HtzZuvPm1C/IKv4oDNXqNDHragety2XVzjECZsJARuBMyRzJrh1O0gQwLXuxofxsPSj4hG8fMLQo7bl9JJD8XZfC1E5yWFOMtd07dvX5kDwg6+2++Chq8txHGtfPoAp0gOFmhYoNFkHjn2TNUmrwRdna7W1QSkU8hvbGk4uThLrapaiLA2E6QY4u/lS9ItHfvJkxYsTMVtnAJLipYIWtVrcdX+8+b8IVnPl/R81prbuPZ1jpYw+0aEUGSkdFsgyBIaFTXCm6nyaxMtJ4n+TeDhJzGqZtQZcuYDgqDwDbqb0JF9oRpIG1Oea3bC1Y6N3x/WV8Zh83emhCs++hlaghDw+8w5UlYKq2lU7Pl8IkvS9KDqXmKmEwdMppVPKwGSEilmyAwJhRwWcq7wYC6z4wZ1rrEoMWxecdOjZWXeAQClBcYDN3NwVwD9pGwqUSyQgclcmxpNJqCuwLmDh3WtvPqXdlt+6Oz70HPGDNSNBee/EOen+rGbEFqDENBPDbtdCp0ukPANmzO0QQJYUpyS5IJJI3Hqt4maS+EB3199ozm8EDU/6fVNU2dQpdx3ZnKzeFXyaUTiasEV/gZMzJMjr3Z+WvAdQ+hs/zw9savimxUntDSaBdZ2f+Idbm1rlNY8esFffBit9HtK5/MejsrJVxikOXlb1Ukir2X+Rbdkd1KG2Ixfn2Ql4JRmELnYK9mEM8G36fAA3xEQ89fxXihC8q+sAKi9jhHxNqagY2hiaYgRCm0f0QP7H4Fp11LSXiuBY2aYFlh0DeDIVVFUJQn5rCnpiNI2gvLxHnASn9DIVHJJlm5rXvQAGEo4zvKq2w5G1NxENN7jrft1oxMdekETjxdH2Z3x+VTVYsPb+O0C/9/auN6v2hNZw5b2UOmSbG5/rkC3LBA+1PdxFxORjxpQ81GcxKc+ybVjEBvUJvaGJ7p7n5A5KSwe4AzkasA+crmzFtowoIVTiLjANm8GDsrWW35ScI3JY8Urv83tnkF8JR0yLvEt2hO/0qNyy3Jb3YKeHeHeLeOuVLRpNF+pkf85OW7/zJxWdXsbsKBUk2TC0BCPwMq5Q/CPvaJFkNS/1l1qUPe+uH3oD59erYGI/Y4sce6KaXYElAIOLt+0O3t2+/xJDF1XvOlWGC1W1B8VMszbGfOvT5qaRRAIFK3BCO164nZ0uYLH2YjNN8thXS2v2BK9gTfD7jHVxzHr4roOlEvYYz9QIz+Vl/sLDXInsctFsXjqIRnO2ZO387lxmIboLDZCJ59KLFliNIgh9ipt6tLg9SihpRPDO1ia5byw7de1aCQmF5geOQtK509rzfdwxaKOIq+73AvwCC5/5fcV4vo3+3LpMdtWHh0ywsJC/ZGoCb8/9D8F/ifgLLl8S8QWfU8cAAAAASUVORK5CYII="> |
27 | | -</p> |
28 | | - |
29 | | -<p align="center"> |
30 | | - <strong> |
31 | | - <a href="CONTRIBUTING.md">Contributing<a/> |
32 | | - • |
33 | | - <a href="docs/vision.md">Vision<a/> |
34 | | - • |
35 | | - <a href="docs/design.md">Design<a/> |
36 | | - • |
37 | | - <a href="docs/monitoring.md">Monitoring<a/> |
38 | | - • |
39 | | - <a href="docs/performance.md">Performance<a/> |
40 | | - • |
41 | | - <a href="docs/roadmap.md">Roadmap<a/> |
42 | | - </strong> |
43 | | -</p> |
44 | | - |
45 | | ---- |
46 | | - |
47 | | - |
48 | | -### OpenTelemetry Collector |
49 | | - |
50 | | -The OpenTelemetry Collector offers a vendor-agnostic implementation on how to receive, process, and export telemetry data. In addition, it removes the need to run, operate, and maintain multiple agents/collectors in order to support open-source telemetry data formats (e.g. Jaeger, Prometheus, etc.) sending to multiple open-source or commercial back-ends. |
51 | | - |
52 | | -Objectives: |
53 | | - |
54 | | -- Usable: Reasonable default configuration, supports popular protocols, runs and collects out of the box. |
55 | | -- Performant: Highly stable and performant under varying loads and configurations. |
56 | | -- Observable: An exemplar of an observable service. |
57 | | -- Extensible: Customizable without touching the core code. |
58 | | -- Unified: Single codebase, deployable as an agent or collector with support for traces, metrics, and logs (future). |
59 | | - |
60 | | -### Community Roles |
61 | | - |
62 | | -Triagers ([@open-telemetry/collector-triagers](https://github.com/orgs/open-telemetry/teams/collector-triager)) |
63 | | -- [Jay Camp](https://github.com/jrcamp), Splunk |
64 | | -- [Steve Flanders](https://github.com/flands), Splunk |
65 | | - |
66 | | -Approvers ([@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers)): |
67 | | - |
68 | | -- [Dmitrii Anoshin](https://github.com/dmitryax), Splunk |
69 | | -- [James Bebbington](https://github.com/james-bebbington), Google |
70 | | -- [Nail Islamov](https://github.com/nilebox), Google |
71 | | -- [Owais Lone](https://github.com/owais), Splunk |
72 | | - |
73 | | -Maintainers ([@open-telemetry/collector-maintainers](https://github.com/orgs/open-telemetry/teams/collector-maintainers)): |
74 | | - |
75 | | -- [Bogdan Drutu](https://github.com/BogdanDrutu), Splunk |
76 | | -- [Paulo Janotti](https://github.com/pjanotti), Splunk |
77 | | -- [Tigran Najaryan](https://github.com/tigrannajaryan), Splunk |
78 | | - |
79 | | -Learn more about roles in the [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md). |
80 | | - |
81 | | -Thanks to all the people who already contributed! |
82 | | - |
83 | | -<a href="https://github.com/open-telemetry/opentelemetry-collector/graphs/contributors"> |
84 | | - <img src="https://contributors-img.web.app/image?repo=open-telemetry/opentelemetry-collector" /> |
85 | | -</a> |
| 1 | +# OpenTelemetry Collector O11y |
| 2 | + |
| 3 | +This repository is focused on building and packaging the OpenTelemetry Collector with a Prometheus remote write exporter |
| 4 | + supporting Sig V4 to export to AWS services. See [Testing](#testing) section on how to generate and send a OTLP metric |
| 5 | + load to a |
| 6 | + Prometheus remote write backend. |
| 7 | + |
| 8 | +## Components |
| 9 | + |
| 10 | +Most upstream components are removed and not included in the build. Available components are: |
| 11 | + |
| 12 | +* Receiver: OpenTelemetry Protocol(OTLP) receiver |
| 13 | +* Processor: None |
| 14 | +* Exporter: Logging exporter, Prometheus remote write exporter |
| 15 | + |
| 16 | +A Collector pipeline with these components is illustrated below: |
| 17 | + |
| 18 | + |
| 19 | + |
| 20 | + |
| 21 | +## Initialization |
| 22 | + |
| 23 | +Components in the collector are initialized by the Collector Service based on configuration. The factory and |
| 24 | +configuration of a component are invoked at the initialization of the Collector Application, and they supply the |
| 25 | +components with parameters components need. AWS Sig V4 support could be passed to the exporter by the factory without |
| 26 | +impacting the data conversion and export logic. |
| 27 | + |
| 28 | +The Prometheus remote write exporter use this pattern. During application initialization, the collector asks exporter |
| 29 | +builders, a service package component, for an implementation of the MetricExporter interface. Then, the exporter builder |
| 30 | + invokes the factory code inside the Prometheus Remote Write Exporter package to create an instance of the Prometheus |
| 31 | + Remote Write Exporter. When invoked, factory uses the exporter helper package to wrap the Exporter implementation |
| 32 | + inside the MetricExporter interface, and returns the instance to the Collector Application. **The factory can also |
| 33 | + pass in an [Sig V4 interceptor-attached http.Client](https://github.com/open-o11y/opentelemetry-collector/blob/d21a840612d40d935ccd52142f06e7106ee82384/exporter/prometheusremotewriteexporter/factory.go#L181) |
| 34 | + to the exporter**. Finally, the Collector Application |
| 35 | + assembles the export pipeline with the exporter. During an export operation, the exporter behaves the same, but the |
| 36 | + interceptor-attached http.Client performs signing of each request. |
| 37 | + |
| 38 | + |
| 39 | + |
| 40 | +## Sample Configuration |
| 41 | + |
| 42 | +The following is a configuration for a Collector instance that receives gRPC OTLP metrics on `localhost:55680`, a |
| 43 | +logging exporter that logs metric to `stdout`, and a Prometheus remote write exporter sending to an endpoint with AWS |
| 44 | +Sig V4 support enabled. |
| 45 | + |
| 46 | +``` |
| 47 | +receivers: |
| 48 | + otlp: |
| 49 | + protocols: |
| 50 | + grpc: |
| 51 | +exporters: |
| 52 | + prometheusremotewrite: |
| 53 | + endpoint: "https://aps-workspaces-beta.us-west-2.amazonaws.com/workspaces/yang-yu-intern-test-ws/remote_write" |
| 54 | + namespace: otel-collector |
| 55 | + auth: |
| 56 | + region: "us-west-2" |
| 57 | + service: "aps" |
| 58 | + timeout: 10s |
| 59 | + logging: |
| 60 | + loglevel: debug |
| 61 | +
|
| 62 | +service: |
| 63 | + extensions: |
| 64 | + pipelines: |
| 65 | + metrics: |
| 66 | + receivers: [otlp] |
| 67 | + exporters: [logging,prometheusremotewrite] |
| 68 | +``` |
| 69 | + |
| 70 | +see a complete list of configuration options and explanation of the prometheus remote write exporter [here](./exporter/prometheusremotewriteexporter/README.md) |
| 71 | + |
| 72 | +## Testing |
| 73 | + |
| 74 | +To test the exporter, run the following command: |
| 75 | + |
| 76 | +``` |
| 77 | +make testaps |
| 78 | +``` |
| 79 | + |
| 80 | +This starts a Collector based on configuration in `/test/otel-config.yaml` and runs OTLP metric load generator to send |
| 81 | +metrics to the exporter. OTLP metrics are generated based on `/test/otlploadgenerator/data.txt`. After the load generator exists, |
| 82 | + it runs a querier to get metrics from the specified endpoint and write the output in `/test/querier/ans.txt`. |
| 83 | + |
| 84 | +More details of testing, load generator and querier are described [here](./test/README.md). |
| 85 | + |
0 commit comments