入职了新公司,需要我去了解prometheus,记录一下prometheus 的心得,不定期更新

先挂官网 https://prometheus.io

比较重要的点:

  • 创建prometheus 服务及配置
  • remote read & remote write
    • remote read (write) 思考 以及一些小坑
    • 如何获取remote write 消息,并把它转成可以使用的数据
    • remote write 持久化指标数据至influx db
  • PushGateway & push clint (这里贴java client)
  • exporter 相关:snmp,node,StatsD等…
  • alertmanager 配置
  • k8s 部署prometheus 集群

1. 创建prometheus服务

网上有现成的,不想写…

2. remote_read & remote_write

prometheus 提供了两个功能,用于监控指标的数据拉取以及存储

a.remote read (write) 思考

  • 注意:
    • remote_read 必须置于顶层,且read_recent 应当为true
    • remote_read 可以配置prometheus server ,也可以配置 influxdb (1.7+)
    • remote_write 可以配置 自己的prometheus remote adapter,也可以配置 1.7版本以上的influxdb

如何配置 remote_read

1
2
3
4
5
remote_read:
- url: http://host:9090/api/v1/read
read_recent: true
remote_write:
- url: http://host:port/xx

思考 :
根据remote_read 进行读写分离,即A prometheus服务进行读,不负责写,B prometheus 负责写,不负责读。
且读prometheus 会产生本地数据,可以手动设置清除频率高一点

b.如何获取remote write 消息,并把它转成可以使用的数据

首先,prometheus自身的remote_write 数据格式其实并不通用————application/x-protobuf,而且官方并没有给出基于java的适配器(adapter)————大多数是用go语言写的,所以假如是想二次开发什么的就多了一些成本…

influxdb

记一个influxdb 坑

pushgate way

push gate way 推送到固定地址 ,最后由prometheus 收集
该操作需要有自己的PushGateWay 节点,PushGateway 相当于一个prometheus 的缓存buffer

java client

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
CollectorRegistry registry = new CollectorRegistry();
Gauge duration = Gauge.build()
.name("my_batch_job_duration_seconds").help("Duration of my batch job in seconds.").register(registry);
Gauge.Timer durationTimer = duration.startTimer();
try {
// Your code here.

// This is only added to the registry after success,
// so that a previous success in the Pushgateway isn't overwritten on failure.
Gauge lastSuccess = Gauge.build()
.name("my_batch_job_last_success").help("Last time my batch job succeeded, in unixtime.").register(registry);
lastSuccess.setToCurrentTime();
} finally {
durationTimer.setDuration();
PushGateway pg = new PushGateway("39.96.11.112:9091");
pg.pushAdd(registry, "my_batch_job");
}

SNMP Exporter

prometheus 官方 snmp_exporter

1.如何使用

  • 找到官方github地址
  • clone到服务器本地
  • 下载snmp exporter 官方提供的release包,如tar.gz 格式
  • 解压下载好的包放到已经clone好的本地目录中
  • 执行docker build命令
  • 成功创建镜像
  • 对带监控机器开启snmp协议

2.snmp

http://host:9116/snmp?target=1.2.3.4&module=if_mib 疑似修改配置文件

Alert Manager

Alertmanager can reload its configuration at runtime. If the new configuration is not well-formed, the changes will not be applied and an error is logged.

  • alertmanager 在运行时可以加载配置 ,若新的配置不正确,则仍运行上一个版本的配置,且报告错误

保存历史指标数据

  • --storage.tsdb.path, Defaults to data/
  • --storage.tsdb.retention.time ,保存几天的历史数据, Defaults to 15d
  • --storage.tsdb.retention.size max 存量,实验性质的配置
  • --storage.tsdb.retention

本文采用CC-BY-SA-3.0协议,转载请注明出处
Author: dadonggua