暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Prometheus 如何自定义监控项

DevOps实战 2021-12-09
3344
Prometheus 目前已经有比较多的第三方 exporter(可跳转官方文档,查看 exporter 列表,https://prometheus.io/docs/instrumenting/exporters/),大部分情况能满足我们的需求。但是有时,我们也需要增加一些特殊的监控项,这一篇文章就来聊聊如何添加这些特殊的监控项。

1 使用脚本的方式

1.1 添加取值脚本

vim /opt/node_exporter/key/key_runner

复制
加入如下内容:
#!/bin/bash
echo ClickHouse_Ping `ps -ef|grep clickhouse-server|grep -v grep|wc -l`
复制
当然,目前已经有 ClickHouse exporter,这里只是举个例子。

1.2 设置定时任务

* * * * bash /opt/node_exporter/key/key_runner > /opt/node_exporter/key/key.prom
复制


1.3 启动 node_exporter

需要指定 key 值的路径
/opt/node_exporter/node_exporter --web.listen-address=:9101 --collector.textfile.directory=/opt/node_exporter/key/ &
复制

1.4 验证

curl 127.0.0.1:9101/metrics|grep ClickHouse_Ping
复制
可以看到如下结果,则说明新的监控项添加成功:
......
# TYPE ClickHouse_Ping untyped
ClickHouse_Ping 1
复制

1.5 后续监控项

后续新增的监控项,在 /opt/node_exporter/key/key_runner 中配置即可。

2 自己编写一个 Exporter

这里编写一个最简单的示例:
package main


import (
"fmt"
"net/http"
"time"
)


func GetTimeStamp() int64 {
return time.Now().Unix()
}


func HelloHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "martin_exporter_get_timestamp{user=\"admin\"} %d", GetTimeStamp())
}


func main() {
http.HandleFunc("/metrics", HelloHandler)
http.ListenAndServe(":8001", nil)
}
复制

通过访问 http://localhost:8001/metrics 就可以获取到如下内容:
martin_exporter_get_timestamp{user="admin"} 1639031311
复制
当然上面例子也是比较粗糙的,如果希望写出高质量的 Exporter,建议将官方有关编写 Exporter 的文档看一遍:https://prometheus.io/docs/instrumenting/writing_exporters/。里面包括了:配置、Metrics 名命、Metrics 标签、帮助信息、端口和部署方式等。

3 结合 pushgateway

3.1 安装 pushgateway

wget https://github.com/prometheus/pushgateway/releases/download/v1.4.2/pushgateway-1.4.2.linux-amd64.tar.gz
tar zxvf pushgateway-1.4.2.linux-amd64.tar.gz
cd pushgateway-1.4.2.linux-amd64/
cp pushgateway /usr/local/bin/
复制
启动
nohup pushgateway --web.listen-address="0.0.0.0:9091" &
复制

3.2 发送和查看自定义指标

发送指标:
echo 'martin_test_count 1'|curl --data-binary @- http://192.168.150.123:9091/metrics/job/martintest
复制
查看指标:
通过访问:http://192.168.150.123:9091/metrics 可查看指标:
......
martin_test_count{instance="",job="martintest"} 1
......
复制

关于自定义监控项就聊到这里,欢迎各位朋友关注这个公众号,后续会分享一些有关 Prometheus、KubernetesGitLab、Docker、Terraform、运维开发的内容。
文章转载自DevOps实战,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论