監控利器:普羅米修斯監控中間件(Nginx、Redis、MySQL等)
在《監控利器:普羅米修斯介紹和安裝》中有一張圖,表明了 Prometheus 的數據走向,如下:
從圖中可以看出,監控中間件的第一步就是安裝中間件的 exporter,安裝有兩種方式:下載安裝文件進行安裝和使用 Docker 進行安裝,下面示例中使用的是后者。
Nginx
我們產品的前端 Web 部署在 nginx 容器中,需要在容器的配置文件中進行 nginx_status 模塊的設置,才能被 exporter 識別。nginx 配置文件添加下面代碼:
location /nginx_status {
stub_status on;
access_log off;
allow all;
# deny all;
}
- 為了測試方便直接設置為 allow all 了,實際可以根據需要進行開放和禁用。
修改配置后,重啟 Web 容器,訪問 http://ip:port/nginx_status ,出現下圖界面,說明配置生效:
執行下面的命令進行 nginx-exporter 容器的安裝:
docker pull nginx/nginx-prometheus-exporter
docker run -p 9113:9113 -d --restart=always --name nginx-exporter nginx/nginx-prometheus-exporter -nginx.scrape-uri http://10.211.55.3:90/nginx_status
- http://192.168.3.78/nginx_status 為被監控的 nginx 服務器的地址。
容器運行后,訪問 9113 端口,如下圖:
在 prometheus 的配置文件中進行綁定,執行vi /usr/local/prometheus/prometheus.yml,在文件的最下面添加 job 配置:
- job_name: 'nginx'
static_configs:
- targets: ['10.211.55.3:9113']
執行命令 systemctl restart prometheus 重啟生效,可以訪問 http://10.211.55.3:9090/targets 查看狀態,如果為 UP 說明 job 設置成功:
在 Grafana 中導入 12078 模板:
最終展示效果如下:
Redis
首先需要安裝 redis_exporter ,執行下面命令進行鏡像的下載和安裝:
docker pull oliver006/redis_exporter
# 如果 redis 沒有密碼執行下面命令
docker run -d --name redis_exporter -p 9121:9121 --network s2v9_test_s2_net oliver006/redis_exporter --redis.addr redis://172.66.9.9:6379
# 如果 redis 有密碼執行下面命令
docker run -d --name redis_exporter -p 9121:9121 --network s2v9_test_s2_net oliver006/redis_exporter --redis.addr redis://172.66.9.9:6379 --redis.password '000000'
- 上面命令中 --network s2v9_test_s2_net 為 redis 容器所在的網絡,因為我的 exporter 容器和 redis 容器在一臺服務器,設置為同一網絡后,--redis.addr 就可以使用容器的內部 IP 和端口。
- 如果是分開部署,不需要設置 --network ,使用服務器 IP 和端口即可。
容器運行成功后,瀏覽器訪問界面如下:
在 prometheus 的配置文件中進行綁定,執行vi /usr/local/prometheus/prometheus.yml,在文件的最下面添加 job 配置:
- job_name: 'reids'
static_configs:
- targets: ['10.211.55.3:9121']
執行命令 systemctl restart prometheus 重啟生效,可以訪問 http://10.211.55.3:9090/targets 查看狀態,如果為 UP 說明 job 設置成功:
在 Grafana 中導入 763 編號的模板:
最終展示效果如下:
RabbitMQ
首先需要安裝 redis_exporter ,執行下面命令進行鏡像的下載和安裝:
docker pull kbudde/rabbitmq-exporter:latest
docker run -d -p 9419:9419 --name rabbitmq-exporter --network s2v9_test_s2_net -e RABBIT_URL=http://172.66.9.8:15672 -e RABBIT_USER=Ican -e RABBIT_PASSWORD=000000 kbudde/rabbitmq-exporter
- -e RABBIT_URL=http://172.66.9.8:15672 ,這里設置的是 RabbitMQ 容器的內部 IP,所以必須設置在同一個網絡中,否則需要將 15672 映射出去。
- -e RABBIT_USER、-e RABBIT_PASSWORD 為 RabbitMQ 的用戶名和密碼,默認為 guest,也可以自行設置。
容器運行成功后,瀏覽器訪問界面如下:
在 prometheus 的配置文件中進行綁定,執行vi /usr/local/prometheus/prometheus.yml,在文件的最下面添加 job 配置:
- job_name: 'rabbitmq'
static_configs:
- targets: ['10.211.55.3:9419']
執行命令 systemctl restart prometheus 重啟生效,可以訪問 http://10.211.55.3:9090/targets 查看狀態,如果為 UP 說明 job 設置成功:
在 Grafana 中導入 2121 編號的模板:
最終展示效果如下:
MySql
在 mysql 數據庫中創建 exporter 賬戶,并設置權限:
CREATE USER 'exporter'@'%' IDENTIFIED BY 'Aa123456';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
在目錄 /root/exporter/config/mysql 中創建 .my.cnf 文件,文件內容如下:
[client]
host=172.66.9.2
port=3306
user=exporter
password=Aa123456
- host 配置為 mysql 數據庫的容器 IP
- user 和 password 配置為新創建的賬號和密碼
執行下面命令安裝 mysqld-exporter :
docker pull prom/mysqld-exporter
docker run -d -p 9104:9104 --network s2v9_test_s2_net --restart="always" -v /root/exporter/config/mysql/.my.cnf:/.my.cnf prom/mysqld-exporter
如果沒有 .my.cnf 文件的映射,會出現下面錯誤:
容器運行成功后,瀏覽器訪問界面如下:
在 prometheus 的配置文件中進行綁定,執行vi /usr/local/prometheus/prometheus.yml,在文件的最下面添加 job 配置:
- job_name: 'mysql'
static_configs:
- targets: ['10.211.55.3:9104']
執行命令 systemctl restart prometheus 重啟生效,可以訪問 http://10.211.55.3:9090/targets 查看狀態,如果為 UP 說明 job 設置成功:
在 Grafana 中導入 7362 編號的模板:
最終展示效果如下: