这就是普罗米修斯处于的位置。普罗米修斯具有一个服务端,这个服务端提供两类服务,一个是主动poll数据的服务,一种是等待exporter端push数据。
这里有个玩意是exporter,那么什么是Exporter?
Exporter
广义上讲所有可以向Prometheus提供监控样本数据的程序都可以被称为一个Exporter。类比于Zabbix中的agent。
Exporter来源
一般社区会提供大部分的exporter,而有些则是一些大牛或者编程爱好者写的,目前Promthues社区官方提供了对以下编程语言的支持:Go、Java/Scala、Python、Ruby
。同时还有第三方实现的如:Bash、C++、Common Lisp、Erlang,、Haskeel、Lua、Node.js、PHP、Rust
等。
可参考博客
安装
这里不提供docker安装的教程,有兴趣的直接访问docker官网即可。
查询镜像
sudo docker search prometheus
拉取Docker镜像
选取start数最多的镜像
sudo docker pull prom/prometheus
不指定则会下载最新的版本。
sudo docker pull prom/node-exporter
sudo docker pull grafana/grafana
启动node-exporter
官方并不建议使用容器化部署node-exporter
The node_exporter is designed to monitor the host system. It’s not
recommended to deploy it as a Docker container because it requires
access to the host system.For situations where Docker deployment is needed, some extra flags
must be used to allow the node_exporter access to the host namespaces.Be aware that any non-root mount points you want to monitor will need
to be bind-mounted into the container.If you start container for host monitoring, specify path.rootfs
argument. This argument must match path in bind-mount of host root.
The node_exporter will use path.rootfs as prefix to access host
filesystem.
docker run -d -p 9100:9100 --name node_exporter \--restart=always \--net="host" \--pid="host" \-v "/proc:/host/proc:ro" \-v "/sys:/host/sys:ro" \-v "/:/rootfs:ro" \prom/node-exporter \--path.procfs=/host/proc \--path.rootfs=/rootfs \--path.sysfs=/host/sys \--collector.filesystem.ignored-mount-points='^/(sys|proc|dev|host|etc)($$|/)'
查看端口是否已经使用
netstat -anpt | grep 9100
访问url
http://loyx01:9100/metrics
配置
使用普通用户创建目录
mkdir -p ~/prometheus/data
cd ~/prometheus/data
global:scrape_interval: 60sevaluation_interval: 60s
scrape_configs:- job_name: prometheusstatic_configs:- targets: ['192.168.1.88:9090']labels:instance: prometheus - job_name: linuxstatic_configs:- targets: ['192.168.1.88:9100','192.168.1.89:9100','192.168.1.90:9100'] - job_name: 'kafka_exporter'metrics_path: "/metrics"scrape_interval: 5sstatic_configs:- targets: ['192.168.1.88:29092','192.168.1.89:29092','192.168.1.90:29092']
一般新增exporter则是在scrape_configs
中添加 job_name,yml文件中-
(短横线代表数组)。
创建一个yml作为测试,这里用到 kafka_exporter(需要启动你的kafka集群)
启动Prometheus
sudo docker run -d \-p 9090:9090 \-v /home/impdatahd/prometheus/data/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus \--web.enable-lifecycle \--web.enable-admin-api \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/prometheus \--web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles
查看端口
netstat -anpt | grep 9090
url
访问graph
http://loyx01:9090/graph
访问targets
http://loyx01:9090/targets
参考链接
停止docker服务
docker ps -n 5
查看容器id
docker stop 容器id
docker ps -n 5 | grep prom/prometheus| awk '{print $1}'| xargs docker stop
查看日志
docker logs + 容器id
普罗米修斯修改配置
解决办法
一般来说,如果修改了普罗米修斯的yml文件,需要重新加载配置,官方提供了一个API来进行调用。
curl -X POST http://102.:9090/-/reload
但是如果没有在启动服务之前加入配置参数,则会弹出提示!
Lifecycle API is not enabled.
--web.enable-lifecycle \--config.file=/etc/prometheus/prometheus.yml \--storage.tsdb.path=/prometheus \--web.console.libraries=/usr/share/prometheus/console_libraries --web.console.templates=/usr/share/prometheus/consoles
grafana
创建目录
使用普通用户
mkdir ~/grafana/grafana-storage
设置权限
chmod 777 -R ~/grafana/grafana-storage
启动grafana
sudo docker run -d \-p 3000:3000 \--name=grafana \-v /home/impdatahd/grafana/grafana-storage:/var/lib/grafana \grafana/grafana
访问url
http://loyx01:3000
添加数据源
选择普罗米修斯
填入普罗米修斯的访问url
点击保存
作图
一般exporter作者会将模板发到grafana labs上,会在他项目中提到,只要导入id就可以。
导入图
这个时候没有数据,不要慌,一般是需要修改下里面的查询语句,这里查询语句是遵循普罗米修斯的查询语法,PromeSQL
!
创建一个自定义的仪表盘监控kafka存活数量
改名
通过这里可以选择监控的内容!
添加机器人
选择群助手中添加告警机器人,将webhook复制到grafana中。
选择告警群组&关键字,机器人会通过关键字过滤,只有涵盖关键字的信息,才会被播报!
复制webhook的url
配置grafana告警通道
将复制好的webhook黏贴过去即可测试保存!
创建一个告警
通过PromQL自定义一个指标监控kafka节点存活个数,当节点有不存活报警!
通过钉钉机器人来发送告警信息。
通过kafka-exporter提供的指标中有上报kafka-borker信息的指标来进行指定ruler。这里统计一天中broker存活最大值减去当前存活值来判断,如果大于1说明有节点今天挂了。触发报警!
在最下面选择发送的对象
测试告警
中括号里是状态,ok代表告警恢复!
注意
docker在run命令中 -v指定的是卷信息,冒号左边的是宿主机的路径,冒号右边为docker的虚拟路径
run docker 普罗米修斯前添加该参数才可以用下面面的api
--web.enable-lifecycle --web.enable-admin-api
重新加载配置文件
curl -X POST http://192.168.1.90:9090/-/reload
删除数据库记录,按照标签+实例名称!
curl -X POST -g 'http://192.168.1.88:9090/api/v1/admin/tsdb/delete_series?match[]={instance=~"kafka"}'