paint-brush
进一步学习 OpenTelemetry Collector 路经@nfrankel
1,336 讀數
1,336 讀數

深入研究 OpenTelemetry Collector

历经 Nicolas Fränkel18m2023/11/18
Read on Terminal Reader

太長; 讀書

虽然 OTEL Collector 不是 OTEL 架构的强制性部分,但它是满足您所有数据处理需求的有用瑞士刀。
featured image - 深入研究 OpenTelemetry Collector
Nicolas Fränkel HackerNoon profile picture
0-item
1-item


OpenTelemetry Collector 在 OpenTelemetry 结构的重心,但与 W3C Trace Context 没有关系。在我的中,我的使用 Jaeger 而是 Collector。其实,它无从没有在,如同在每项与 OpenTelemetry 有关的的博客文章中一般。想要进每一步探寻它。


在这篇本文中,我探究了收录器的区别因素:


  • 数据类型:日志、指标和跟踪
  • 推拉模型
  • 操作:读取、转换和写入

第一步

很久以前,我们所知的可观察性并不存在;我们所拥有的只是监控。当时,监控是一群人看着显示仪表板的屏幕。仪表板本身包含指标并且仅包含系统指标:主要是 CPU、内存和磁盘使用情况。出于这个原因,我们将从指标开始。


是主要是的监控录像彻底解决计划中之一。它采用以源于拉取的建模:Prometheus 扒取用软件的兼容端点并将其存放在的内部。


我们大家将选择的 OTEL Collector 来获取 Prometheus 兼容的端点并在的控制面板中复印数据。 Grafana Labs 作为没事个可以转为随机函数公式的。要为简便尽量,我将选择的 Docker Compose;装置有以下所显示:


 version: "3" services: fake-metrics: build: ./fake-metrics-generator #1 collector: image: otel/opentelemetry-collector:0.87.0 #2 environment: #3 - METRICS_HOST=fake-metrics - METRICS_PORT=5000 volumes: - ./config/collector/config.yml:/etc/otelcol/config.yaml:ro #4
  1. 没有可用于假指标项目的 Docker 镜像;因此,我们需要构建它
  2. 截至撰写本文时的 OTEL Collector 最新版本
  3. 参数化以下配置文件
  4. 一切都发生在这里


以至于我上端谈及的,OTEL Collector 能做有很多东西。但是,配资也就是一切都是。


 receivers: #1 prometheus: #2 config: scrape_configs: #3 - job_name: fake-metrics #4 scrape_interval: 3s static_configs: - targets: [ "${env:METRICS_HOST}:${env:METRICS_PORT}" ] exporters: #5 logging: #6 loglevel: debug service: pipelines: #7 metrics: #8 receivers: [ "prometheus" ] #9 exporters: [ "logging" ] #9
  1. 接收者列表。接收器读取数据;它可以是基于推式的,也可以是基于拉式的。
  2. 我们使用prometheus预定义的接收器
  3. 定义拉动作业
  4. 作业配置
  5. 出口商名单。与接收者不同,导出者写入数据。
  6. 最简单的导出器是将数据写入标准输出
  7. 管道组装接收器和输出器
  8. 定义与指标相关的管道
  9. pipeline从之前定义的prometheus接收器获取数据并发送给logging导出器,打印出来


以上是效果范例:


 2024-11-11 08:28:54 otel-collector-collector-1 | StartTimestamp: 1971-01-01 00:00:00 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Timestamp: 2024-11-11 07:28:54.14 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Value: 83.090000 2024-11-11 08:28:54 otel-collector-collector-1 | NumberDataPoints #1 2024-11-11 08:28:54 otel-collector-collector-1 | Data point attributes: 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__embrace_world_class_systems: Str(concept) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__exploit_magnetic_applications: Str(concept) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__facilitate_wireless_architectures: Str(extranet) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__grow_magnetic_communities: Str(challenge) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__reinvent_revolutionary_applications: Str(support) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__strategize_strategic_initiatives: Str(internet_solution) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__target_customized_eyeballs: Str(concept) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__transform_turn_key_technologies: Str(framework) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__whiteboard_innovative_partnerships: Str(matrices) 2024-11-11 08:28:54 otel-collector-collector-1 | StartTimestamp: 1971-01-01 00:00:00 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Timestamp: 2024-11-11 07:28:54.14 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Value: 53.090000 2024-11-11 08:28:54 otel-collector-collector-1 | NumberDataPoints #2 2024-11-11 08:28:54 otel-collector-collector-1 | Data point attributes: 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__expedite_distributed_partnerships: Str(approach) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__facilitate_wireless_architectures: Str(graphical_user_interface) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__grow_magnetic_communities: Str(policy) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__reinvent_revolutionary_applications: Str(algorithm) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__transform_turn_key_technologies: Str(framework) 2024-11-11 08:28:54 otel-collector-collector-1 | StartTimestamp: 1971-01-01 00:00:00 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Timestamp: 2024-11-11 07:28:54.14 +0000 UTC 2024-11-11 08:28:54 otel-collector-collector-1 | Value: 16.440000 2024-11-11 08:28:54 otel-collector-collector-1 | NumberDataPoints #3 2024-11-11 08:28:54 otel-collector-collector-1 | Data point attributes: 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__exploit_magnetic_applications: Str(concept) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__grow_magnetic_communities: Str(graphical_user_interface) 2024-11-11 08:28:54 otel-collector-collector-1 | -> fake__target_customized_eyeballs: Str(extranet)

超越印刷

上端是一种个比较好的第一个步,但不禁仅是word打印到操作台。让各位将公开监督由常規 Prometheus 图片提取的因素;让各位能加入来数据可视化我们。尽管说这看下去豪不想义,但请隐忍它,为了它只 一种块垫脚石。


为了更好地推动下列目地,大家只需变化 OTEL Collector 配资:


 exporters: prometheus: #1 endpoint: ":${env:PROMETHEUS_PORT}" #2 service: pipelines: metrics: receivers: [ "prometheus" ] exporters: [ "prometheus" ] #3
  1. 添加prometheus导出器
  2. 公开符合 Prometheus 标准的端点
  3. 以曝光代替印刷


都是这样一来。 OTEL Collector 无比灵活多变。


一定要注意力,收录器是多键盘输入、多导出的。要打印出统计数据并能够端点公布患者,我们大家将患者获取到管网中:


 exporters: prometheus: #1 endpoint: ":${env:PROMETHEUS_PORT}" logging: #2 loglevel: debug service: pipelines: metrics: receivers: [ "prometheus" ] exporters: [ "prometheus", "logging" ] #3
  1. 公开数据
  2. 打印数据
  3. 管道将打印数据并公开它们


系统配置 Prometheus 导到器后,我门可不可以在 Grafana 中可视化效果要求。


可视化指标


请注意,接收者和导出者指定其类型,并且每个类型都必须是唯一的。为了满足最后一个要求,我们可以附加一个限定符来区分它们,prometheus/fooprometheus/bar.

中间数据处理

其中一个有用的疑问是为这些 OTEL Collector 快速配置在源和 Prometheus 内,如果它使全局装修设计越来越贫瘠。在这儿一阶段,让咱们能够利用 OTEL Collector 的完全力量强大系统:参数办理。到日前到止,让咱们逐渐收集了原目标,但源文件后缀有可能隐疼合让咱们若想的参数信息可视化的方法。比如说,在让咱们的快速配置中,目标来自五湖四海让咱们的假生产器“项目”和低层 NodeJS 软件平台“技术水平”。它体现了在目标的名字大全中。让咱们能够增添专门的源标贴并删掉不用要的前缀以更有用地滤水。


您可以在配置文件的processors部分中声明数据处理器。收集器按照声明的顺序执行它们。让我们来实现上面的转换。


实行小编的目标的首位步是了解收藏器有两类设计特点:“裸”设计特点和对于它的贡献奖设计特点。前面的包含了的加工手机处理器在數量和性能里边十分有限;所以,小编想要切回 contrib 最新版本。


 collector: image: otel/opentelemetry-collector-contrib:0.87.0 #1 environment: - METRICS_HOST=fake-metrics - METRICS_PORT=5000 - PROMETHEUS_PORT=8889 volumes: - ./config/collector/config.yml:/etc/otelcol-contrib/config.yaml:ro #2
  1. 使用contrib风味
  2. 为了增加乐趣,配置文件位于另一个路径上


因此,咱们可填加处里器本质:


 processors: metricstransform: #1 transforms: #2 - include: ^fake_(.*)$ #3 match_type: regexp #3 action: update operations: #4 - action: add_label #5 new_label: origin new_value: fake - include: ^fake_(.*)$ match_type: regexp action: update #6 new_name: $${1} #6-7 # Do the same with metrics generated by NodeJS
  1. 调用指标转换处理器
  2. 按顺序应用的变换列表
  3. 将所有指标与定义的正则表达式匹配
  4. 按顺序应用的操作列表
  5. 添加标签
  6. 通过删除正则表达式组前缀来重命名指标
  7. 有趣的东西:语法是$${x}


结果,咱们将定意的正确四核处理器加上到pvc管道中:


 service: pipelines: metrics: receivers: [ "prometheus" ] processors: [ "metricstransform" ] exporters: [ "prometheus" ]


結果正确:


结果

连接接收方和出口方

连接器既是接收器又是输出器,连接两条管道。文档中的示例接收跨度数(跟踪)并导出具有指标的计数。我试图以 500 个错误实现相同的目标 - 剧透:它没有按预期工作。


我们大家先要增长一位工作日志接受到器:


 receivers: filelog: include: [ "/var/logs/generated.log" ]


第二步,大家修改一两个链接器:


 connectors: count: requests.errors: description: Number of 500 errors condition: [ "status == 500 " ]


最好,我门相连日记接收入器和指標导进器:


 service: pipelines: logs: receivers: [ "filelog" ] exporters: [ "count" ] metrics: receivers: [ "prometheus", "count" ]


该指标名为log_record_count_total ,但其值仍为 1。

日志操作

工作器准许大数据运行步骤;运行步骤员是工作工作日志的专业工作器。如果您记住 Elasticsearch Logstash Kibana 堆栈,他们相当的于 Logstash。


截止日现在,系统日志精力戳是摄入精力戳。我将其就要变更为其打造的精力戳。


 receivers: filelog: include: [ "/var/logs/generated.log" ] operators: - type: json_parser #1 timestamp: #2 parse_from: attributes.datetime #3 layout: "%d/%b/%Y:%H:%M:%S %z" #4 severity: #2 parse_from: attributes.status #3 mapping: #5 error: 5xx #6 warn: 4xx info: 3xx debug: 2xx - id: remove_body #7 type: remove field: body - id: remove_datetime #7 type: remove field: attributes.datetime - id: remove_status #7 type: remove field: attributes.status
  1. 日志为JSON格式;我们可以使用提供的 JSON 解析器
  2. 要设置的元数据属性
  3. 要读取的字段
  4. 解析模式
  5. 映射表
  6. 接受一个范围,例如501-599 。该运算符对 HTTP 状态有一个特殊的解释值5xx (及类似值)。
  7. 删除重复数据

日志

倘若,.我行将笔记发送去到任何笔记配位聚合元件。.我将留下 Grafana Labs 前沿技术并实用 Loki。


 exporters: loki: endpoint: "//loki:3100/loki/api/v1/push"


你们还应该动用持续器任何的运行日志:


 service: telemetry: logs:


另外,.我“添加另个个管网:


 service: pipelines: logs: receivers: [ "filelog" ] exporters: [ "loki" ]


Grafana 还需要交互式日记。选泽 Loki 算作统计资料源。

结论

在这篇原创文章中,人们深入学习探析了 OpenTelemetry 获取器。然而它不能 OTEL 系统架构的禁止性环节,但它是考虑您每个大数据加工处理业务需求的使用瑞士队刀。若您找不到进入相关堆栈或非要只要做,这将有的是个很大的可以帮助。


这篇内容的完整性源程序是什么应该在上找自己。


更进一步:


最初于 2023 年 11 月 12 日于


바카라사이트 바카라사이트 온라인바카라