1、监控docker
cAdvisor是专门用于收集容器相关信息滴
1.1、下载 cAdvisor
> 下载cadvisor
docker pull google/cadvisor
1.2、启动容器
- 方式一、直接docker run
docker run \
-v /:/rootfs:ro \
-v /var/run:/var/run/:rw \
-v /sys:/sys:ro \
-v /var/lib/docker:/var/lib/docker:ro \
-p 8080:8080 --detach=true --name=cadvisor \
--net=host google/cadvisor
- 方式二、使用docker-compose -f cadvisor.yaml up -d
cat cadvisor.yml
version: "2.3"
services:
cadvisor:
image: google/cadvisor:latest
container_name: cadvisor
hostname: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
- /dev/disk/:/dev/disk:ro
ports:
- "8081:8080"
devices:
- "/dev/kmsg"
restart: always
networks:
- prom_monitor
networks:
prom_monitor:
driver: bridge
> 启动
docker-compose -f cadvisor.yml up -d
docker-compose -f cadvisor.yml ps
- 方式三、使用docker-compose up -d 启动
> cat docker-compose.yml
...
内容和上边一样
...
启动
docker-compose up -d
1.3、验证
浏览器输入:http://10.10.20.10:8085
1.4、Prometheus收集cadvisor数据
[root@vm04 file_sd]# tail prometheus.yml
file_sd_configs:
- files:
- targets/nodes_*.yaml
refresh_interval: 2m
# docker
- job_name: 'docker'
file_sd_configs:
- files:
- targets/docker.yaml
refresh_interval: 10s
[root@vm04 file_sd]# cat targets/docker.yaml
- targets:
- 10.10.20.10:8085
labels:
app: docker-cadvisor
job: docker
验证:./promtool check config ./prometheus.yml
重启:systemctl restart prometheus
1.5、Grafana展示
导入模板
893 11600
2、监控mysql
mysqld_exporter 用于收集mysql的监控数据
2.1、下载
https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar -xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64 mysqld_exporter
cd mysqld_exporter
2.2、添加相关配置
- 配置1、 在mysql中添加监控用户 mysql_exporter
create user mysqld_exporter@'%' identified by 'mysqld_exporter';
grant process,replication client,select on *.* to mysqld_exporter@'%';
- 配置2、 在 mysql_exporter目录下添加mysql配置文件,运行时可免密码连接数据库
mysqld_exporter]# cat my.cnf
[client]
user=mysqld_exporter
password=mysqld_exporter
- 配置systemctl
cd /usr/lib/systemd/system
cat mysqld_exporter.service
[Unit]
Description=mysql_exporter
After=network.target
[Service]
ExecStart=/opt/src/mysqld_exporter/mysqld_exporter --config.my-cnf=/opt/src/mysqld_exporter/my.cnf
ExecReload=/bin/kill -HUP $MAINPID
LimitNOFILE=65535
Restart=on-failure
[Install]
WantedBy=multi-user.target
或者采用如下方式
cat start.sh
#!/bin/bash
nohup ./mysqld_exporter --config.my-cnf=./my.cnf --web.listen-address=":9105" \
--exporter.lock_wait_timeout=2 \
--collect.info_schema.processlist.min_time=0 \
--collect.info_schema.processlist.processes_by_user \
--collect.info_schema.processlist.processes_by_host \
--collect.info_schema.tables.databases="*" \
--collect.mysql.user.privileges \
--collect.perf_schema.eventsstatements.limit=250 \
--collect.perf_schema.eventsstatements.timelimit=86400 \
--collect.perf_schema.eventsstatements.digest_text_limit=120 \
--collect.perf_schema.file_instances.filter=".*" \
--collect.perf_schema.memory_events.remove_prefix="memory/" \
--web.telemetry-path="/metrics" \
--timeout-offset=0.25 \
--tls.insecure-skip-verify \
--collect.info_schema.processlist \
--collect.mysql.user \
--collect.info_schema.tables \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_metrics \
--collect.global_status \
--collect.global_variables \
--collect.slave_status \
--collect.perf_schema.indexiowaits \
--collect.perf_schema.tablelocks \
--collect.perf_schema.eventsstatements \
--collect.perf_schema.eventswaits \
--collect.auto_increment.columns \
--collect.binlog_size \
--collect.perf_schema.tableiowaits \
--collect.perf_schema.replication_group_members \
--collect.perf_schema.replication_group_member_stats \
--collect.info_schema.userstats \
--collect.info_schema.clientstats \
--collect.perf_schema.file_events \
--collect.perf_schema.file_instances \
--collect.perf_schema.memory_events \
--collect.info_schema.innodb_cmpmem \
--collect.info_schema.query_response_time \
--collect.engine_innodb_status \
--collect.info_schema.tablestats \
--collect.info_schema.schemastats \
--collect.info_schema.innodb_cmp \
--collect.info_schema.replica_host \
--log.level=info \
--log.format=logfmt &
#--exporter.log_slow_filter \
#--collect.perf_schema.eventsstatementssum \
#--collect.engine_tokudb_status \
#--collect.heartbeat.database="heartbeat" \
#--collect.heartbeat.table="heartbeat" \
#--collect.heartbeat.utc \
#--collect.perf_schema.replication_applier_status_by_worker \
#--collect.slave_hosts \
#--collect.heartbeat \
cat stop.sh
#!/bin/bash
ps -ef |grep 9105 |grep -v grep |awk '{print $2}' |xargs kill -9
cat status.sh
#!/bin/bash
lsof -i:9105 &>/dev/null && echo mysql_export_9105 is running ||echo mysql_export_9105 is down
2.3、启动
systemctl daemon-reload
systemctl start mysqld_exporter
- 验证
netstat -ntpl |grep mysqld_export
tcp6 0 0 :::9104 :::* LISTEN 42895/mysqld_export
> 浏览器访问
10.10.20.10:9104/metrics
2.4、配置prometheus
> cd /opt/src/prometheus/file_sd
> ls
prometheus.yml rules targets
cat targets/mysql.yaml
- targets:
- 10.10.20.10:9104
labels:
app: mysql_monitor
job: mysql
---
tail prometheus.yml
# mysql
- job_name: 'mysql'
file_sd_configs:
- files:
- targets/mysql.yaml
refresh_interval: 10s
2.5、配置grafana
> 7362
3、监控nginx
3.1、下载相关模块
监控Nginx主要用到以下三个模块:
nginx-module-vts:Nginx virtual host traffic status module\
Nginx的监控模块,能够提供JSON格式的数据产出。
nginx-vts-exporter:Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption。
主要用于收集Nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。
> 下载地址
https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.1.18.tar.gz
https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
3.2、配置
- nginx配置
> 加载 nginx-mode-vts模块
./configure --add-module=/opt/src/nginx/nginx-module-vts
make && make install
vim nginx.conf
http {
...
charset utf8;
include lyzm/server.conf;
include lyzm/upstream.conf;
# 添加如下
vhost_traffic_status_zone;
vhost_traffic_status_filter_by_host on;
}
vim server.conf
server {
listen 8084;
server_name localhost;
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
# 配置解释
1、vhost_traffic_status_zone; 是必填项
2、vhost_traffic_status_filter_by_host on; 即打开vhost过滤,开启此功能,在nginx配置有多个server_name的情况下
会根据不同的server_name进行流量的统计,否则默认会把流量全部计算到第一个server_name上
3、 在不想统计流量的server区域可以使用 vhost_traffic_status off; 禁止
> 重启nginx
> 访问:http://10.10.20.10:8084/status
- 配置
tar -xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
mv nginx-vts-exporter-0.10.3.linux-amd64 nginx-vts-exporter
cd nginx-vts-exporter
> 启动
> nohup ./nginx-vts-exporter \
-nginx.scrape_timeout=10 \
-nginx.scrape_uri=http://localhost:8084/status/format/json \
-telemetry.address=:9913
> netstat -ntpl |grep nginx-vts
[root@kube-master nginx-vts-exporter]# netstat -ntpl |grep nginx-vts
tcp 0 0 10.10.20.10:9913 0.0.0.0:* LISTEN 100404/./nginx-vts-
- prometheus配置
> pwd
/opt/src/prometheus/file_sd
> tail targets/nginx.yaml
- targets:
- 10.10.20.10:9913
labels:
app: nginx_monitor
job: nginx
> tail prometheus.yml
# nginx
- job_name: 'nginx'
file_sd_configs:
- files:
- targets/nginx.yaml
refresh_interval: 10s
3.4、grafana
2949 9512
12708
4、监控openvpn
参考:https://github.com/kumina/openvpn_exporter
4.1、使用openvpn_exporter收集监控信息
docker run --name=openvpn_exporter -p 9176:9176 -d \
-v /var/log/openvpn/:/etc/openvpn_exporter/server.status \
kumina/openvpn-exporter \
-openvpn.status_paths /etc/openvpn_exporter/server.status/openvpn-status.log
- 参数解释
# 指定openvpn-status状态日志路径
/var/log/openvpn/:/etc/openvpn_exporter/server.status
# 指定openvpn_exporter容器内的openvpn-status日志路径
-openvpn.status_paths /etc/openvpn_exporter/server.status/openvpn-status.log
4.2、prometheus添加监控信息
tail prometheus.yml
...
- job_name: 'openvpn'
static_configs:
- targets: ['10.0.4.2:9176']
4.3、grafana添加图形
10562
12140