Alloy代替Prometheus的exporter采集指标
初始化
初始化文件夹
mkdir -p /data/monitor/prometheus
# 修改权限, 否则到时候Prometheus无法写入数据
chmod -R 777 /data/monitor
Prometheus配置
vim /data/monitor/prometheus.yml
这里不暴露端点, 因为用Prometheus做存储, Prometheus Exporter探测的功能使用Alloy代替了
global:
# 抓取指标时间间隔, 默认值为1分钟
scrape_interval: 15s
# 评估时间间隔, 默认值为1分钟
evaluation_interval: 15s
# scrape_timeout is set to the global default (10s).
# 告警配置
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# 加载规则一次,并根据全局“evaluation_interval”定期评估它们
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
Alloy配置
vim /data/monitoralloy-local-config.yaml
Alloy本身提供了多种平台与服务的指标抓取、处理、分发能力,并通过prometheus进行远端收集与分析;如:kafka、oracle、mysql、postgres、redis、windows、unix等,内置功能支持直接配置采集端点即可使用,简化了安装各种端点组件来使用,使部署与实施变得更容易
采集指标
- 当前主机的信息(Linux的)
- MySQL部分信息(部分信息, 如果要其它的, 那么需要自己alloy配置中继续添加)
- 需要注意的是不要参考官方文档中的添加, 因为官方文中添加一个heartbeat收集(健康探测用的), 这个需要新建名为"heartbeat"的数据库和名为"heartbeat"的表
- Redis所有信息
如果要添加其它的指标收集参考prometheus | Grafana Alloy 文档 - Grafana 可观测平台
// 基础设施指标收集组件一般都是prometheus.exporter.*的形式, 见官方文档https://grafana.com/docs/alloy/latest/reference/components/prometheus/
// 目标组件, 这里目标组件是Linux
prometheus.exporter.unix "node" {}
// 抓取目标组件指标
prometheus.scrape "node" {
// 源
targets = prometheus.exporter.unix.node.targets
// 指标转发
forward_to = [prometheus.relabel.node.receiver]
// 10s抓取一次指标
scrape_interval = "10s"
}
// 筛选指标
// prometheus.relabel 组件通常用于筛选 Prometheus 指标或标准化传递给一个或多个下游接收器的标签集
prometheus.relabel "node" {
// 将address或者instance替换成host
rule {
action = "replace"
source_labels = ["__address__", "instance"]
separator = "/"
target_label = "host"
}
// 处理完后转发到组件
forward_to = [prometheus.remote_write.metrics_service.receiver]
}
prometheus.exporter.redis "redis" {
redis_addr = "redis:6379"
redis_password = "123456"
}
prometheus.scrape "redis" {
targets = prometheus.exporter.redis.redis.targets
forward_to = [prometheus.remote_write.metrics_service.receiver]
}
// 指标发送到prometheus中
prometheus.remote_write "metrics_service" {
endpoint {
url = "http://prometheus:9090/api/v1/write"
}
}
docker-compose.yaml文件
version: "3.8"
networks:
monitor:
driver: bridge
services:
prometheus:
image: prom/prometheus:v3.2.1
container_name: prometheus
command:
- --config.file=/etc/prometheus/prometheus.yml
- --storage.tsdb.path=/prometheus
- --web.console.libraries=/etc/prometheus/console_libraries
- --web.console.templates=/etc/prometheus/consoles
- --storage.tsdb.retention.time=200h
# 必须要添加这个参数, 否则Prometheus不开启remove write功能
- --web.enable-remote-write-receiver
ports:
- 9090
restart: no
volumes:
- /data/monitor:/etc/prometheus
- /data/monitor/prometheus:/prometheus
networks:
- monitor
alloy:
image: grafana/alloy:latest
container_name: alloy
command: run --server.http.listen-addr=0.0.0.0:12345 --storage.path=/var/lib/alloy/data /etc/alloy/config.alloy
ports:
- 12345:12345
volumes:
- /data/monitor/alloy-local-config.yaml:/etc/alloy/config.alloy:ro
networks:
- monitor
grafana:
image: grafana/grafana-enterprise:latest
# 容器名
container_name: grafana
# 数据持久化
environment:
- GF_AUTH_ANONYMOUS_ENABLED=true # 开启匿名访问(生产环境应关闭)
# 设置 Grafana 的管理员(admin)账户的初始密码为admin
- GF_SECURITY_ADMIN_PASSWORD=admin
# 设置Grafana的语言为简体中文
- GF_VIEWER_LANGUAGE=zh-Hans
# 设置 Grafana 的默认用户界面主题为暗黑模式
- GF_USERS_DEFAULT_THEME=dark
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
ports:
- 3000:3000
networks:
- monitor
redis:
image: redis:6.2.16
container_name: redis
# 设置持久化,允许远程访问,密码等
command: redis-server --appendonly yes --bind 0.0.0.0 --requirepass "123456"
ports:
- 6379:6379
volumes:
- /data/redis:/data/redis
environment:
- TZ=Asia/Shanghai
networks:
- monitor
效果
添加仪表盘, 导入Prometheus数据
面板数据
Linux: Node Exporter Full | Grafana Labs
Redis: Redis Exporter Dashboard CN 20221128-StarsL.cn | Grafana Labs
查看效果
Linux主机的
Redis的
参考资料
从 Prometheus 迁移到 Grafana Alloy
使用 Grafana Alloy 向 Prometheus 发送指标
Prometheus 配置 · Prometheus中文技术文档
Prometheus学习系列(八)之Prometheus API说明
Prometheus通过remote_write写入数据到另一台Prometheus
No metric on command execution time on redis7 · Issue #798 · oliver006/redis_exporter
exporter-toolkit/docs/web-configuration.md at master · prometheus/exporter-toolkit · GitHub