当前位置: 代码迷 >> 综合 >> 部署docker版Prometheus+grafana+监控kafka和系统状态
  详细解决方案

部署docker版Prometheus+grafana+监控kafka和系统状态

热度:79   发布时间:2023-11-22 15:55:16.0

在这里插入图片描述这就是普罗米修斯处于的位置。普罗米修斯具有一个服务端,这个服务端提供两类服务,一个是主动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"}'