MENU

Prometheus+Grafana(四)添加监控源

July 22, 2021 • Read: 727 • 默认分类

如何监控服务?

如果要想监控,前提是能获取被监控端指标数据,并且这个数据格式必须遵循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: 92768919

https://grafana.com

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

要提高安全性可以启用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

注: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仪表盘参考:

  1. https://grafana.com/grafana/dashboards/7589 (推荐)
  2. https://grafana.com/grafana/dashboards/9018 (参考-新的)
  3. https://grafana.com/grafana/dashboards/9947(参考-新的)
  4. https://grafana.com/grafana/dashboards/10973(JMX-阿里云)
  5. https://www.menina.cn/article/88
  6. https://cloud.tencent.com/developer/news/377416

导入官方模板 ,可在官方模板查看模板编号7589(推荐)如果内网环境建议可下载后导入。

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

  • 预警指标

序号预警名称预警规则描述
1Broker数量预警当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 官方监控介绍: 

本文是采用第二种方式实现。

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]

- - - The END - - -
  • 文章作者:谭先生
  • 版权所有:文章转载时,注明出处即可!
  • 本站部分资源收集于网络,纯个人收藏,无商业用途,如有侵权请及时告知!
  • Last Modified: July 27, 2021
    Archives QR Code Tip
    QR Code for this page
    Tipping QR Code
    阅读:727