APO 集成生态exporter一键完成指标采集

news2024/11/29 4:48:26

Metrics 作为可观测性领域的三大支柱之一,Metrics数据采集显得尤为重要。传统的prometheus工具采集指标,需要指定路径抓取,当指标越来越多配置会显得复杂。同时prometheus只能采集指定的指标,当用户需要节点系统相关、中间件等指标还需要引进额外组件。久而久之采集指标配置难以维护。

APO 利用Grafana-Alloy完成指标采集

APO 为了用户更好地一键采集各类指标,选择 Grafana-Alloy 作为APO的指标采集器,兼容OpenTelemtry生态,集成到 APO OneAgent之中,APO OneAgent负责采集所有指标,发送至APO-Server,存储至Victoria-Metrics, APO-front负责展示所有指标。当需要额外采集数据,只需配置OneAgent中Alloy数据采集源,无需更改其他组件,配置灵活,简单易懂。


APO 指标采集配置步骤 

安装APO-Agent之时,已经安装自带安装了grafana-Alloy。APO启动之后 APO Server并对外提供服务,OneAgent抓取指标,然后发送到 Server,可以在APO Front中的Grafana查看数据。
当用户想要修改指标采集配置,修改 apo-grafana-alloy-config ConfigMap即可(虚机环境下修改apo配置文件config/grafana-alloy/config.alloy)

采集的配置步骤如下:

  1. 配置APO-server地址
  2. 配置apo-grafana-alloy-config文件
  3. grafana查询指标

APO server地址配置

首先需要配置APO Server地址,OneAgent采集指标后将数据发送到APO Server

otelcol.receiver.prometheus "default" {
  output {
   metrics = [otelcol.exporter.otlp.default.input]
  }
}

otelcol.exporter.otlp "default" {
  client {
    endpoint = "<host-ip>:<port>"
    tls {
        insecure = true
        insecure_skip_verify = true
    }
  }
}

配置说明:其中 receiver 接收 prometheus 指标,转换成 otel 格式,然后exporter导出发送至APO-Server

APO缺采集配置

以kubernetes环境为例,通常一个集群可能存在如下指标需要采集

  • node metrics 节点机器系统相关指标 (磁盘,cpu等信息)
  • kubelet metrics 提供 node 和 Pod 的基本运行状态和资源使用情况
  • cadvisor metrics container相关的详细资源使用和性能指标数据

机器相关指标采集

prometheus.exporter.unix "local_system" {
}

prometheus.scrape "scrape_metrics" {
  targets = prometheus.exporter.unix.local_system.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  scrape_interval = "10s"
}

该组件会采集机器上的各种资源指标

kubernetes 指标采集

其中 discovery.kubernetes 组件负责获取kubernetes信息, APO 这里选择获取node相关的信息
之后采集 kubelet和 cadvisor相关的指标,由于是k8s集群,还需要配置 scheme, bearer_token_file等权限相关信息

discovery.kubernetes "nodes" {
  role = "node"
}

prometheus.scrape "kubelet" {
  targets  = discovery.kubernetes.nodes.targets
  scheme   = "https"
  scrape_interval = "60s"
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  tls_config {
    insecure_skip_verify = true
  }
  clustering {
    enabled = true
  }
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  job_name = "integrations/kubernetes/kubelet"
}

prometheus.scrape "cadvisor" {
  targets    = discovery.kubernetes.nodes.targets
  scheme     = "https"
  scrape_interval = "60s"
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  tls_config {
    insecure_skip_verify = true
  }
  clustering {
    enabled = true
  }
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  job_name = "integrations/kubernetes/cadvisor"
  metrics_path = "/metrics/cadvisor"
}

scrape指标采集

通常用户还会部署一些自定义的探针程序,用于自定义一些监控指标
只需指定 targets 下的 __addres__ 用于指定采集URL, __metrics__path__自定义采集路径,默认为/metircs

prometheus.scrape "agent_metrics" {
  targets = [
    {
      __address__ = "<scrape-path-1>:<port>",
    },
    {
      __address__ = "<scrape-path-2>:<port>",
      __metrics__path__ = "/metrics/agent"
    },
    {
      __address__ = "<scrape-path-3>:<port>",
    },
    ]
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  scrape_interval = "10s"
}
如采集APO node-agent 指标

APO node-agent 用于采集上下游网络指标和进程启动时间指标,路径为 localhost:9500/metrics

prometheus.scrape "agent_metrics" {
  targets = [
    {
      __address__ = "localhost:9408",
    }
    ]
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  scrape_interval = "10s"
}

一键采集中间件指标

除了采集基本指标外,用户使用APO还可以根据自己的需求额外配置其他指标采集。
如采集各类 中间件指标(kafka, redis, mysql, elasticsearch等)

监控 MySQL 

1.OneAgent 的 alloy 配置文件添加如下内容,然后重启 OneAgent

# 采集 mysql指标
prometheus.exporter.mysql "example" {
  data_source_name  = "username:password@(<mysql-url>:3306)/"
  enable_collectors = ["heartbeat", "mysql.user"]
}

prometheus.scrape "mysql" {
  targets    = prometheus.exporter.mysql.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

2.APO Front 的 Grafana 中导入 MySQL 模版

3.验证是否有MySQL指标数据 

监控 ElasticSearch 

1.OneAgent 的 alloy 配置文件添加如下内容,然后重启 OneAgent

# 采集 elasticsearch指标
prometheus.exporter.elasticsearch "example" {
  address = "http://<elasticsearch-url>:9200"
  basic_auth {
    username = USERNAME
    password = PASSWORD
  }
}

prometheus.scrape "mysql" {
  targets    = prometheus.exporter.elasticsearch.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

2.APO Front 的 Grafana 中导入 ElasticSearch 模版
3.验证是否有ElasticSearch指标数据

 监控 Redis

1.OneAgent 的 alloy 配置文件添加如下内容,重启OneAgent

# 采集 redis 指标
prometheus.exporter.redis "example" {
  address = "<redis-url>:6379"
}

prometheus.scrape "redis" {
  targets    = prometheus.exporter.redis.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

2.APO Front 的 Grafana 导入 Redis 模版
3.验证是否有 Redis 指标数据 

监控 Kafka 

1.OneAgent 的 alloy 配置文件添加如下内容,重启OneAgent

# 采集 kafka 指标
prometheus.exporter.kafka "example" {
  address = "<kafka-url>:9092"
}

prometheus.scrape "kafka" {
  targets    = prometheus.exporter.kafka.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

2.APO Front 的 Grafana 导入 Kafka 模版
3.验证是否有Kafka 指标数据


更多指标的采集可以参考Grafana-Alloy的官方文档或者咨询我们 

Alloy已经支持如下中间件指标采集:


参考资料

otel-collector

otlp-configgrpc

victora-metrics

Sending data via OpenTelemetry


alloy

discovery.kubernetes
otel.receiver.prometheus
prometheus

样例配置文件

logging {
  level  = "info"
  format = "logfmt"
}


otelcol.receiver.prometheus "default" {
  output {
   metrics = [otelcol.processor.transform.default.input]
  }
}

otelcol.processor.transform "default" {
  error_mode = "ignore"
  trace_statements {
    context = "resource"
    statements = [
     `replace_all_patterns(attributes, "key", "service\\.instance\\.id", "service_instance_id")`,
     `replace_all_patterns(attributes, "key", "service\\.name", "service_name")`,
     `replace_all_patterns(attributes, "key", "net\\.host\\.name", "net_host_name")`,
    ]
  }
  output {
    metrics = [otelcol.exporter.otlp.default.input]
  }
}

otelcol.exporter.otlp "default" {
  client {
    endpoint = "<host-ip>:<port>"
    tls {
        insecure = true
        insecure_skip_verify = true
    }
  }
}

prometheus.exporter.unix "local_system" {
}

prometheus.scrape "scrape_metrics" {
  targets = prometheus.exporter.unix.local_system.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  scrape_interval = "10s"
}

prometheus.scrape "agent_metrics" {
  targets = [
    {
      __address__ = "<scrape-path-1>",
    },
    {
      __address__ = "<scrape-path-2>",
    },
    {
      __address__ = "<scrape-path-3>",
    },
    ]
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  scrape_interval = "10s"
}

discovery.kubernetes "nodes" {
  role = "node"
}

prometheus.scrape "kubelet" {
  targets  = discovery.kubernetes.nodes.targets
  scheme   = "https"
  scrape_interval = "60s"
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  tls_config {
    insecure_skip_verify = true
  }
  clustering {
    enabled = true
  }
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  job_name = "integrations/kubernetes/kubelet"
}

prometheus.scrape "cadvisor" {
  targets    = discovery.kubernetes.nodes.targets
  scheme     = "https"
  scrape_interval = "60s"
  bearer_token_file = "/var/run/secrets/kubernetes.io/serviceaccount/token"
  tls_config {
    insecure_skip_verify = true
  }
  clustering {
    enabled = true
  }
  forward_to = [otelcol.receiver.prometheus.default.receiver]
  job_name = "integrations/kubernetes/cadvisor"
  metrics_path = "/metrics/cadvisor"
}


# 采集 mysql指标
prometheus.exporter.mysql "example" {
  data_source_name  = "username:password@(<mysql-url>:3306)/"
  enable_collectors = ["heartbeat", "mysql.user"]
}

// Configure a prometheus.scrape component to send metrics to.
prometheus.scrape "mysql_metrics" {
  targets    = prometheus.exporter.mysql.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

# 采集 elasticsearch指标
prometheus.exporter.elasticsearch "example" {
  address = "http://<elasticsearch-url>:9200"
  basic_auth {
    username = USERNAME
    password = PASSWORD
  }
}

prometheus.scrape "demo" {
  targets    = prometheus.exporter.elasticsearch.example.targets
  forward_to = [otelcol.receiver.prometheus.default.receiver]
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062226.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚幻5|制作一个木桩,含血量及伤害数字

一&#xff0c;基础设置 1.创建Actor蓝图类 2.编辑胶囊体和网格体的碰撞预设 3.打开敌人的角色蓝图&#xff0c;编辑飙血特效 二&#xff0c;创建敌人血量的ui&#xff0c;命名为敌人血量&#xff0c;如下 1. 2&#xff0c;打开后&#xff0c;添加一个画布画板和进度条&#…

为什么有了session和cookie还要使用JWT

session和cookie 为什么要使用session和cookie,他的流程是怎么样的 因为浏览器是无状态的,相当于每一次访问都是一次全新的访问,我们一般是登录来进行校验获取他的全部信息,所以会出现这个情况 这样当然也可以使用,但是很繁琐,并且影响性能,所以出现了session和cookie,他会生…

MDN边看边记

css css应用于文档的三种方法&#xff1a;使用外部样式表、使用内部样式表和使用内联样式。 css的层叠&#xff08;cascade&#xff09;和优先级&#xff08;specificity&#xff09;&#xff1a; 层叠&#xff1a; 在css中&#xff0c;顺序很重要&#xff0c;当应用两条同级…

苹果手机怎么连接蓝牙耳机?3个方案,3秒连接

在快节奏的现代生活中&#xff0c;无线蓝牙耳机因其便捷性和自由度成为了许多人的首选。那么&#xff0c;苹果手机怎么连接蓝牙耳机呢&#xff1f;本文将为您介绍3种快速连接苹果设备与蓝牙耳机的方案&#xff0c;让您在享受音乐、通话或观看视频时&#xff0c;不再受线缆束缚&…

‌无人机干扰技术及其法律约束

无人机作为一种先进的航空器&#xff0c;‌近年来在民用、‌商用、‌军事等领域得到了广泛应用。‌然而&#xff0c;‌随着无人机技术的不断发展&#xff0c;‌其受到的潜在威胁也日益增多。‌许多外部因素可以干扰无人机的正常运行&#xff0c;‌甚至导致其失控或坠毁。‌本文…

linux内核驱动流程

norflash:可线性访问(和内存的访问方式相同) nandflash: 不可线性访问&#xff0c;必须配个专门的程序访问 Linux启动: 1. 引导程序 bootloader&#xff0c;为内核启动准备环境 2.启动内核(kernel) 3. 加载根文件系统(挂载) 1.bootloader启动(裸机程序)--uboot.bin --为内…

[240822] X-CMD 发布 v0.4.7: 新增 htop 、btop 和 ncdu 模块;优化 colr 和 scoop 模块

X-CMD 发布 v0.4.7 目录 X-CMD 发布 v0.4.7&#x1f4c3;Changelog✨ htop✨ btop✨ ncdu✨ colr✨ scoop✅ 升级指南 &#x1f4c3;Changelog ✨ htop 新增 htop 模块。本模块优先使用环境中的 htop 命令&#xff1b;若当前环境没有 htop 命令&#xff0c;模块将使用 pixi 模…

线程池的构造以及相关方法

手写线程池 package cn.itcast.n8;import lombok.extern.slf4j.Slf4j; import org.springframework.core.log.LogDelegateFactory; import java.util.ArrayDeque; import java.util.Deque; import java.util.HashSet; import java.util.concurrent.TimeUnit; import java.util…

【卡码网C++基础课 6.数组的倒序与隔位输出】

目录 题目描述与分析一、数组二、Vector三、倒序输出数组四、隔位输出五、完整代码 题目描述与分析 题目描述&#xff1a; 给定一个整数数组&#xff0c;编写一个程序实现以下功能&#xff1a; 1.将输入的整数数组倒序输出&#xff0c;每个数之间用空格分隔。 2.从正序数组中&…

可视化大屏-实现自动滚动

一、背景&#xff1a;可视化大屏通常需要用到自动滚动的效果&#xff0c;本文主要采用的是vue-seamless-scroll组件来实现&#xff08;可参考官方文档&#xff09; 二、实现效果&#xff1a; 自动滚动 三、代码实现&#xff1a; 解题思路&#xff1a; 1.先安装依赖包 npm inst…

zTree 异步加载实现 点击加载

效果图如下 每级最多显示5000条数据&#xff0c;点击加载 会再次加载5000条数据 可以监听滚动条 动态加载 我这没实现这种方式。 <!-- ztreejs --> <script src".ztree/js/jquery.ztree.core.min.js" type"text/javascript"></script>…

DLAFormer:微软提出多任务统一的端到端文本分析Transformer模型 | ICDAR 2024

论文提出新颖的基于Transformer的端到端方法DLAFormer&#xff0c;在统一的模型中集成多个文档布局分析任务&#xff0c;包括图形页面对象检测、文本区域检测、逻辑角色分类和阅读顺序预测。为了实现这一目标&#xff0c;将各种DLA子任务视为关系预测问题并提出了统一标签空间方…

kafka监控工具EFAK

kafka监控工具&#xff08;EFAK&#xff09; 1、下载2、解压3、配置3.1、安装数据库&#xff0c;需要是mysql&#xff0c;并创建ke数据库3.2、修改配置文件 4、启动4.1、启动zookeeper4.2、启动kafka4.3、启动EFAK 5、访问http://ip:8048 github地址&#xff1a;https://github…

colmap的几种相机类型和内外参取得方法

colmap的相机类型可以参考models.h文件。 主要有以下几种相机类型&#xff1a; SimplePinhole&#xff1a; 内参格式&#xff1a;f, cx, cy 实际用的时候&#xff1a;fxfyf Pinhole: 内参格式&#xff1a;fx, fy, cx, cy 其他可以自行查看models.h文件。 内参存放在images.b…

《微信小程序开发》系列:第1篇—微信小程序简介

1.什么是微信小程序 微信小程序是一种运行在微信内部的 轻量级 应用程序。 在使用小程序时 不需要下载安装&#xff0c;用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念&#xff0c;用户不用关心安装太多应用的问题。它实现了应用“触手可及”的梦想&…

回归分析系列14— 多项式回归

17 多项式回归 17.1 简介 多项式回归是线性回归的一种扩展&#xff0c;它允许回归模型包括输入变量的高次项。这种方法特别适合处理非线性关系的数据。 17.2 多项式回归模型 在多项式回归中&#xff0c;模型形式如下&#xff1a; 其中&#xff0c;p 是多项式的阶数&#xf…

Vue项目-三级联动的路由跳转与传参

三级联动组件的路由的跳转与传参 三级联动&#xff0c;用户可以点击的&#xff1a;一级分类、二级分类和三级分类 以商城项目为例&#xff0c;Home模块跳转到Search模块&#xff0c;以及会把用户选中的产品&#xff08;产品名字、产品ID&#xff09;在路由跳转的时候&#xff…

【控糖有道,健康无忧!糖尿病患者的饮食黄金法则大揭秘】

在快节奏的现代生活中&#xff0c;糖尿病作为一种常见的慢性疾病&#xff0c;正悄然影响着越来越多人的生活质量。面对这一挑战&#xff0c;科学合理的饮食管理成为了控制病情、提升生活品质的关键。今天&#xff0c;就让我们一同揭开糖尿病饮食的黄金法则&#xff0c;让“控糖…

CentOS服务器三级等保加固

1.密码周期: vim /etc/login.defs max_days:90 mindays:2 minlen:8 warnage:72.密码复杂度: vim /etc/pam.d/system-auth &#xff1a; password requisite pam_cracklib.so retry3 difok3 minlen8 lcredit-1 dcredit-1 ucredit-1 ocredit-1 【Ubuntu系统->vim /etc/pam.d/c…

Linux组的介绍,所有者,所在组,修改所在组

目录 linux组的介绍 文件/目录所有者 组的创建 文件/目录所在组 其它组 改变用户所在组 linux组的介绍 每个用户必须属于一个组&#xff0c;不能独立于组外。 这个文件是谁创建的&#xff0c;这个文件的所有者就是谁。 这个文件属于组1&#xff0c;那么组2对它来说就…