如何监控服务?
如果要想监控,前提是能获取被监控端指标数据
,并且这个数据格式必须遵循Prometheus数据模型
,这样才能识别和
采集,一般使用exporter组件提供监控指标数据。
exporter列表:
https://prometheus.io/docs/instrumenting/exporters

暴露指标的方式:
1、自己写metrics
接口,遵循数据模型
1)先知道怎么收集你要监控指标
2)集成官方的客户端或自己数据格式,暴露出来)
2、使用社区维护的exporter
(采集器,以数据模型暴露metrics接口)
一、监控Linux服务器
node_exporter
:用于监控Linux系统的指标采集器。
常用指标:
• CPU
• 内存
• 硬盘
• 网络流量
• 文件描述符
• 系统负载
• 系统服务
数据接口:http://IP:9100
使用文档:https://prometheus.io/docs/guides/node-exporter/
GitHub:https://github.com/prometheus/node_exporter
下载解压:
# wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
# tar -xf node_exporter-1.1.2.linux-amd64.tar.gz
# mv node_exporter-1.1.2.linux-amd64 /usr/local/node_exporter
# cd /usr/local/node_exporter
配置为系统服务管理:
vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
[Service]
ExecStart=/usr/local/node_exporter/node_exporter # -- web.config=/usr/local/node_exporter/config.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start node_exporter #启动服务
systemctl enable node_exporter #设置为开机启动
在Prometheus配置文件添加被监控端:
master操作:
修改prometheus.yml,添加以下内容:
- job_name: 'webservers'
#basic_auth:
#username: prometheus
#password: 123456
static_configs:
- targets: ['192.168.31.62:9100']

检查配置文件:
./promtool check config ./prometheus.yml
使用热加载生效配置文件
kill -HUP 进程号
或者
curl -XPOST IP:9090/-/reload重新加载
Grafana添加面板
使用Grafana展示node_exporter数据指标,仪表盘ID: 9276
、8919


发现网络带宽这里没有采集到数据,修改网卡名即可


要提高安全性可以启用HTTP认证:
agent:
vi /usr/local/node_exporter/config.yml
basic_auth_users:
prometheus: $2y$12$RC4HOCkmmupzZfgdL56XUu0zZ1sdEVbe3J4NS17nybLFt54hzWO7G
# 用户名: 密码
上面密码用下面命令生成:
yum install httpd-tools –y
htpasswd -nBC 12 '' | tr -d ':\n'
重启node_exporter服务
systemctl restart node_exporter
master:
vim /opt/monitor/prometheus/prometheus.yml
- job_name: 'webservers'
basic_auth:
username: prometheus
password: 123456
static_configs:
- targets: ['192.168.31.62:9100']
使用热加载生效配置文件:
kill -HUP 进程号
或者
curl -XPOST IP:9090/-/reload重新加载
二、监控系统服务运行状态
/usr/local/node_exporter/node_exporter --web.config=/usr/local/node_exporter/config.yml --
collector.systemd --collector.systemd.unit-whitelist=(docker|sshd|nginx).service

三、监控Docker服务器
cAdvisor
(Container Advisor) :用于收集正在运行的容器资源使用和性能信息。
项目地址:https://github.com/google/cadvisor
Docker部署cAdvisor:
docker run -d \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:lates
在Prometheus配置文件添加被监控端:
master操作:
修改prometheus.yml,添加以下内容:

Grafana添加面板
仪表盘模板ID:193

监控多台Docker服务器需要设置
label_values(up.instance)
#选择标签为instance
Regex行 也可以写正则去匹配


四、监控Mysql服务器
mysql_exporter
:用于收集MySQL性能信息。监听端口:9104
项目地址:https://github.com/prometheus/mysqld_exporter
1、安装mysqld_exporter:
其实mysqld_exporter
部署在哪台服务器上都是可以的,因为之后会在mysqld_exporter
的配置文件中连接所要监控的mysql。
我这里直接将mysqld_exporter
部署在MySQL Server
服务器上。
# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz
# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter
2、授权:
mysqld_exporter
需要连接上MySQL之后,才能获取到监控数据。
# 创建数据库用户。
mysql> CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'exporter123';
# 可查看主从运行情况查看线程,及所有数据库。
mysql> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
mysql> flush privileges;
因为mysqld_exporter
部署在MySQL Server
服务器上,所以这里只授权了本地权限,如果是部署在别的服务器上,则需要授予远程权限
。
3、创建配置文件
cd /usr/local/mysqld_exporter
vim .my.cnf
[client]
host=localhost
user=exporter
password=exporter123
启动的时候,指定这个配置文件即可。
4、配置为系统服务管理:
cat > /usr/lib/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
5、启动exporter:
$ systemctl daemon-reload
$ systemctl start mysqld_exporter
$ systemctl status mysqld_exporter
$ systemctl enable mysqld_exporter
$ ss -tln | grep 9104
Ps:报错:
使用status查看 一直提示登录被拒绝 一开始以为是密码错误或者权限的问题,后面发现localhost可以登录,但是127.0.0.1登录会提示Error 1045

解决:
我的原因是在配置文件my.ini [mysqld]项,在其后加入了一句:skip-name-resolve
导致授权出现这个错误,把skip-name-resolve这项屏蔽了就好了。 这个参数是禁止域名解析的
6、在Prometheus配置文件添加被监控端:
master操作:
修改prometheus.yml,添加以下内容:
- job_name: 'mysqldbserver'
static_configs:
- targets: ['XXX.XXX.XXX.XXX:9104']
- targets: ['XXX.XXX.XXX.XXX:9104']
使用热加载生效配置文件:
kill -HUP 进程号
或者
curl -XPOST IP:9090/-/reload重新加载
Grafana添加面板
推荐仪表盘ID:7362

五、监控Kafka集群
Kafka现有开源的集群监控方案:kafka-manager、kafka-monitor、kafka-eagle、KafkaOffsetMonitor,但有所限制监控指标被固化,不易扩展、预警功能弱。Kafka集群的监控方案倾向于使用Grafana + Prometheus,监控数据采集器使用Kafka_exporter。
第一种:JMX
https://help.aliyun.com/document_detail/141108.html?spm=a2c4g.11186623.6.621.12bb4dea7EyM9F
http://www.eryajf.net/4736.html
第二种:kafka_exporter
此处采用第二种方式实现,相比JMX,优势在于不需要消耗 JVM资源,指标收集时间从分钟级别降到秒级别,便于大规模集群的监控。
项目地址:
- kafka_exporter:https://github.com/danielqsj/kafka_exporter
- jmx_exporter:https://github.com/prometheus/jmx_exporter
安装配置kafka_exporter
注:1个kafka集群只需要1个exporter,在集群上的任意1台服务器部署。
1、下载
安装包下载,也可以wget在线下载,这里我下载到了/root目录下
# wget https://github.com/danielqsj/kafka_exporter/releases/download/v1.2.0/kafka_exporter-1.2.0.linux-amd64.tar.gz
2、解压/usr/local目录下,并重命名
# tar -zxvf kafka_exporter-1.2.0.linux-amd64.tar.gz -C /usr/local/
# cd /usr/local/
# mv kafka_exporter-1.2.0.linux-amd64/ kafka_exporter
3、启动
前台启动,默认监听端口9308
# ./kafka_exporter --kafka.server=192.168.0.44:9092
后台启动
# nohup ./kafka_exporter --kafka.server=192.168.0.44:9092 &
4、加入开机自启
cat > /usr/lib/systemd/system/kafka_exporter.service << "EOF"
[Unit]
Description=kafka_exporter
After=local-fs.target network-online.target network.target
Wants=local-fs.target network-online.target network.target
[Service]
ExecStart=/usr/local/kafka_exporter/kafka_exporter --kafka.server=192.168.0.44:9092
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
启动postgres_exporter:
# systemctl daemon-reload
# systemctl enable kafka_exporter
# systemctl start kafka_exporter
# systemctl status kafka_exporter
5、游览器访问
http://192.168.0.44:9308

也可以通过http://192.168.0.44:9308/metrics,看抓取的指标信息
6、Prometheus配置
进入prometheus服务器安装目录,编辑prometheus.yml
# vim /opt/monitor/prometheus/prometheus.yml
......
- job_name: 'kafka_monitor'
static_configs:
- targets: ['192.168.0.44:9308']
使用热加载生效配置文件:
kill -HUP 进程号
#或者
curl -XPOST localhost:19090/-/reload
#重新加载
浏览器查看监控信息:http://192.168.0.25:19090/targets
7、Grafana添加面板
- Grafana仪表盘参考:
- https://grafana.com/grafana/dashboards/7589 (推荐)
- https://grafana.com/grafana/dashboards/9018 (参考-新的)
- https://grafana.com/grafana/dashboards/9947(参考-新的)
- https://grafana.com/grafana/dashboards/10973(JMX-阿里云)
- https://www.menina.cn/article/88
- https://cloud.tencent.com/developer/news/377416
导入官方模板 ,可在官方模板查看模板编号7589
(推荐)如果内网环境建议可下载后导入。

配置完之后,查看仪表盘,就能自动读取prometheus存储的数据

- 预警指标
序号 | 预警名称 | 预警规则 | 描述 |
1 | Broker数量预警 | 当Broker数量达到阈值【<3】时进行预警 | |
2 | 消费延迟预警 | 当积压的消息数量达到阈值【>1000】时进行预警 | |
3 | 失效副本分区预警 | 当失效副本分区数量达到阈值【>0】时进行预警 |
可以自己写查询满足需求,生产环境的监控界面弄的也比较简单,三个图标

生产环境的监控环境配置及对应查询语句




对应图标的三条查询语句为

kafka_brokers

sum(irate(kafka_topic_partition_current_offset{topic !~ "__consumer_offsets|__transaction_state|test",env="$env",app="$app"}[30s])) by (topic) >= 0

sum(kafka_consumergroup_lag{env="$env",app="$app"}) by (topic,consumergroup)
六、监控Redis集群
Prometheus也可以用redis_exporter
来监控Redis。
项目地址为:https://github.com/oliver006/redis_exporter
1、安装redis_exporter
其实redis_exporter部署在哪台服务器上都是可以的,因为之后会在启动redis_exporter的时候配置所要监控的redis的连接地址。
我这里直接将redis_exporter部署在Redis Server服务器(192.168.0.44)上。
# wget https://github.com/oliver006/redis_exporter/releases/download/v1.23.1/redis_exporter-v1.23.1.linux-amd64.tar.gz
# tar -zxf redis_exporter-v1.23.1.linux-amd64.tar.gz
# mv redis_exporter-v1.23.1.linux-amd64 /usr/local/redis_exporter
其他版本地址: https://github.com/oliver006/redis_exporter/releases
2、redis_exporter 运行参数
可以通过./redis_exporter --help
命令查看各个参数的含义,比较常用的参数如下 :
-redis.addr string:Redis实例的地址,可以使一个或者多个,多个节点使用逗号分隔,默认为 "redis://localhost:6379"
-redis.password string:Redis实例的密码
-web.listen-address string:服务监听的地址,默认为 0.0.0.0:9121
3、启动 redis_exporter 服务
创建启动文件(使用systemd管理)
cat > /usr/lib/systemd/system/redis_exporter.service <<EOF
[Unit]
Description=redis_exporter
Documentation=https://github.com/oliver006/redis_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/redis_exporter/redis_exporter -redis.addr 192.168.0.44:6379 -redis.password 123456
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
Ps: -redis.addr后面跟的是集群redis节点,只要能连接到一个集群的一个节点,自然就能查询其他节点的指标
启动redis_exporter:
$ systemctl daemon-reload
$ systemctl start redis_exporter
$ systemctl status redis_exporter
$ systemctl enable redis_exporter
$ ss -tln | grep 9121
4、添加监控目标
需要把redis_exporter
监控目标添加到prometheus server
中。
单机Redis:
- job_name: 'redis'
scrape_interval: 10s
static_configs:
- targets: ['XXX.XXX.XXX.XXX:9121']
labels:
instance: redis-01
Cluster-Redis:
- job_name: 'redis_exporter_targets'
static_configs:
- targets:
- redis://xx.xx.xx.xx:7001
- redis://xx.xx.xx.xx:7002
params:
check-keys: ["metrics:*"]
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: xx.xx.xx.xx:9121 #部署节点ip
- job_name: 'redis_exproter'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
# redis_exporter组件
static_configs:
- targets: ['xx.xx.xx.xx:9121'] #部署节点ip

重启Prometheus server
$ systemctl restart prometheus
或者热加载
$ curl -X POST localhost:9090/-/reload
5、添加Grafana模板
在Grafana的官方网站上我们可以找到比较好用的Redis的Dashboard模板
推荐的有:11835
763 6908
面板效果:

七、监控PostgreSQL数据库
用postgres_exporter
来监控PGSQL 默认端口:9187
项目地址:https://github.com/prometheus-community/postgres_exporter
1、安装postgres_exporter
docker:
$ docker run -itd --name postgres_exporter -p 9187:9187 -e DATA_SOURCE_NAME="postgresql://postgres:postgres@localhost:5432/postgres?sslmode=disable" wrouesnel/postgres_exporter
二进制:
# wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.9.0/postgres_exporter-0.9.0.linux-amd64.tar.gz
# tar zxvf postgres_exporter-0.9.0.linux-amd64.tar.gz
# mv postgres_exporter-0.9.0.linux-amd64 /usr/local/postgres_exporter
其他版本地址:https://github.com/prometheus-community/postgres_exporter/releases
2、创建 postgres_exporter.env 文件
设定DATA_SOURCE_NAME 环境参数
# postgres_exporter.env
DATA_SOURCE_NAME="postgresql://postgres:postgres@localhost:5432/?sslmode=disable"
3、启动 postgres_exporter 服务
创建启动文件(使用systemd管理)
# vim /usr/lib/systemd/system/postgres_exporter.service
[Unit]
Description=Prometheus exporter for Postgresql
Wants=network-online.target
After=network-online.target
[Service]
User=postgres
Group=postgres
WorkingDirectory=/usr/local/postgres_exporter
EnvironmentFile=/usr/local/postgres_exporter/postgres_exporter.env
ExecStart=/usr/local/postgres_exporter/postgres_exporter
Restart=always
[Install]
WantedBy=multi-user.target
启动postgres_exporter:
$ systemctl daemon-reload
$ systemctl start postgres_exporter
$ systemctl status postgres_exporter
$ systemctl enable postgres_exporter
$ ss -tln | grep 9187
有报错:
函数 pg_current_wal_lsn() 不存在

由于PGSQL版本函数变化的原因 这里我的数据库版本是9.5

10以后的版本

4、添加监控目标
需要把postgres_exporter
监控目标添加到prometheus server
中。
......
- job_name: Postgresql_Server
static_configs:
- targets: ['XXX.XXX.XXX.XXX:9187']
labels:
instance: 'ip:5432'
platform: 'ec2'
- targets: ['XXX.XXX.XXX.XXX:9187']
labels:
instance: 'ip:5432'
platform: 'ec2'
重启Prometheus server
$ systemctl restart prometheus
或者热加载$ curl -X POST localhost:9090/-/reload
5、Grafana添加面板
推荐模板:9628
查看数据:

可以自定义模板,可参考这个博客:
https://blog.csdn.net/weixin_30537391/article/details/95286751
八、监控RabbitMQ服务器
1、前言
第一种:RabbitMQ内部集成Prometheus来获取指标
- 3.8.0之前版本,RabbitMQ可以使用单独的插件prometheus_rabbitmq_exporter来向Prometheus公开指标,要单独下载到RabbitMQ安装目录中进行安装;
prometheus_rabbitmq_exporter:https://github.com/deadtrickster/prometheus_rabbitmq_exporter
- 3.8.0版开始,RabbitMQ附带了内置的Prometheus&Grafana支持。虽然内置了该插件,但也要进行安装
rabbitmq-prometheus:https://github.com/rabbitmq/rabbitmq-prometheus
第二种:使用独立程序来获取指标(RabbitMQ_exporter)
不管什么版本都能使用,要单独启动exporter进程
rabbitmq_exporter:https://github.com/kbudde/rabbitmq_exporter
RabbitMQ 官方监控介绍:
- https://www.rabbitmq.com/monitoring.html
- https://www.rabbitmq.com/prometheus.html#overview-prometheus
本文是采用第二种方式实现。
1、安装rabbitmq_exporter
注:在RabbitMQ集群下的任意一个节点部署它。
# wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC8/rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz
# tar zxvf rabbitmq_exporter-1.0.0-RC8.linux-amd64.tar.gz
# mv rabbitmq_exporter-1.0.0-RC8.linux-amd64 /usr/local/rabbitmq_exporter
其他版本地址:https://github.com/kbudde/rabbitmq_exporter/releases
2、启动:
启动 需要在RABBIT_USER=root RABBIT_PASSWORD=root填写rabbit账号密码
cd /usr/local/rabbitmq_exporter
RABBIT_USER=ste01 RABBIT_PASSWORD=123456 OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:5672 nohup ./rabbitmq_exporter &
3、在Prometheus配置文件添加被监控端:
master操作:
修改prometheus.yml,添加以下内容:
- job_name: 'rabbitMq'
static_configs:
- targets: ['ip:9099']
labels:
instance: rabbitMq
使用热加载生效配置文件:
kill -HUP 进程号
或者
curl -XPOST IP:9090/-/reload重新加载
Grafana添加面板
仪表盘ID:
待更新!
[toc]