docker-compose快速搭建 Prometheus+Grafana监控系统

忘是亡心i 2022-02-26 10:16 1369阅读 0赞

一、说明
Prometheus负责收集数据,Grafana负责展示数据。其中采用Prometheus 中的 Exporter含:
1)Node Exporter,负责收集 host 硬件和操作系统数据。它将以容器方式运行在所有 host 上。
2)cAdvisor,负责收集容器数据。它将以容器方式运行在所有 host 上。
3)Alertmanager,负责告警。它将以容器方式运行在所有 host 上。

二、安装docker,docker-compose
2.1 安装docker
先安装一个64位的Linux主机,其内核必须高于3.10,内存不低于1GB。在该主机上安装Docker。

  1. # 安装依赖包
  2. yum install -y yum-utils device-mapper-persistent-data lvm2
  3. # 添加Docker软件包源
  4. yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  5. # 安装Docker CE
  6. yum install docker-ce -y
  7. # 启动
  8. systemctl start docker
  9. # 开机启动
  10. systemctl enable docker
  11. # 查看Docker信息
  12. docker info

2.2 安装docker-compose

  1. curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  2. chmod +x /usr/local/bin/docker-compose

三、添加配置文件

  1. mkdir -p /usr/local/src/config
  2. cd /usr/local/src/config

2.1 添加prometheus.yml配置文件,
vim prometheus.yml

  1. # my global config
  2. global:
  3. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  4. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  5. # scrape_timeout is set to the global default (10s).
  6. # Alertmanager configuration
  7. alerting:
  8. alertmanagers:
  9. - static_configs:
  10. - targets: ['192.168.159.129:9093']
  11. # - alertmanager:9093
  12. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  13. rule_files:
  14. - "node_down.yml"
  15. # - "first_rules.yml"
  16. # - "second_rules.yml"
  17. # A scrape configuration containing exactly one endpoint to scrape:
  18. # Here it's Prometheus itself.
  19. scrape_configs:
  20. # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  21. - job_name: 'prometheus'
  22. static_configs:
  23. - targets: ['192.168.159.129:9090']
  24. - job_name: 'cadvisor'
  25. static_configs:
  26. - targets: ['192.168.159.129:8080']
  27. - job_name: 'node'
  28. scrape_interval: 8s
  29. static_configs:
  30. - targets: ['192.168.159.129:9100']

2.2 添加邮件告警配置文件
添加配置文件alertmanager.yml,配置收发邮件邮箱
vim alertmanager.yml

  1. global:
  2. smtp_smarthost: 'smtp.163.com:25'  #163服务器
  3. smtp_from: 'tsiyuetian@163.com'        #发邮件的邮箱
  4. smtp_auth_username: 'tsiyuetian@163.com'  #发邮件的邮箱用户名,也就是你的邮箱
  5. smtp_auth_password: 'TPP***'        #发邮件的邮箱密码
  6. smtp_require_tls: false        #不进行tls验证
  7. route:
  8. group_by: ['alertname']
  9. group_wait: 10s
  10. group_interval: 10s
  11. repeat_interval: 10m
  12. receiver: live-monitoring
  13. receivers:
  14. - name: 'live-monitoring'
  15. email_configs:
  16. - to: '1933306137@qq.com'        #收邮件的邮箱

2.3 添加报警规则
添加一个node_down.yml为 prometheus targets 监控
vim node_down.yml

  1. groups:
  2. - name: node_down
  3. rules:
  4. - alert: InstanceDown
  5. expr: up == 0
  6. for: 1m
  7. labels:
  8. user: test
  9. annotations:
  10. summary: "Instance {
  11. { $labels.instance }} down"
  12. description: "{
  13. { $labels.instance }} of job {
  14. { $labels.job }} has been down for more than 1 minutes."

四、编写docker-compose
vim docker-compose-monitor.yml

  1. version: '2'
  2. networks:
  3. monitor:
  4. driver: bridge
  5. services:
  6. prometheus:
  7. image: prom/prometheus
  8. container_name: prometheus
  9. hostname: prometheus
  10. restart: always
  11. volumes:
  12. - /usr/local/src/config/prometheus.yml:/etc/prometheus/prometheus.yml
  13. - /usr/local/src/config/node_down.yml:/etc/prometheus/node_down.yml
  14. ports:
  15. - "9090:9090"
  16. networks:
  17. - monitor
  18. alertmanager:
  19. image: prom/alertmanager
  20. container_name: alertmanager
  21. hostname: alertmanager
  22. restart: always
  23. volumes:
  24. - /usr/local/src/config/alertmanager.yml:/etc/alertmanager/alertmanager.yml
  25. ports:
  26. - "9093:9093"
  27. networks:
  28. - monitor
  29. grafana:
  30. image: grafana/grafana
  31. container_name: grafana
  32. hostname: grafana
  33. restart: always
  34. ports:
  35. - "3000:3000"
  36. networks:
  37. - monitor
  38. node-exporter:
  39. image: quay.io/prometheus/node-exporter
  40. container_name: node-exporter
  41. hostname: node-exporter
  42. restart: always
  43. ports:
  44. - "9100:9100"
  45. networks:
  46. - monitor
  47. cadvisor:
  48. image: google/cadvisor:latest
  49. container_name: cadvisor
  50. hostname: cadvisor
  51. restart: always
  52. volumes:
  53. - /:/rootfs:ro
  54. - /var/run:/var/run:rw
  55. - /sys:/sys:ro
  56. - /var/lib/docker/:/var/lib/docker:ro
  57. ports:
  58. - "8080:8080"
  59. networks:
  60. - monitor

五、启动docker-compose

  1. #启动容器:
  2. docker-compose -f /usr/local/src/config/docker-compose-monitor.yml up -d
  3. #删除容器:
  4. docker-compose -f /usr/local/src/config/docker-compose-monitor.yml down
  5. #重启容器:
  6. docker restart id

容器启动如下:
docker-compose快速搭建 Prometheus+Grafana监控系统

prometheus targets界面如下:
docker-compose快速搭建 Prometheus+Grafana监控系统

备注:如果State为Down,应该是防火墙问题,参考下面防火墙配置。

prometheus graph界面如下:
docker-compose快速搭建 Prometheus+Grafana监控系统

备注:如果没有数据,同步下时间。

六、防火墙配置
6.1 关闭selinux

  1. setenforce 0
  2. vim /etc/sysconfig/selinux

6.2 配置iptables

  1. #删除自带防火墙
  2. systemctl stop firewalld.service
  3. systemctl disable firewalld.service
  4. #安装iptables
  5. yum install -y iptables-services
  6. #配置
  7. vim /etc/sysconfig/iptables
  8. *filter
  9. :INPUT ACCEPT [0:0]
  10. :FORWARD ACCEPT [0:0]
  11. :OUTPUT ACCEPT [24:11326]
  12. -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
  13. -A INPUT -p icmp -j ACCEPT
  14. -A INPUT -i lo -j ACCEPT
  15. -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
  16. -A INPUT -p tcp -m state --state NEW -m tcp --dport 9090 -j ACCEPT
  17. -A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
  18. -A INPUT -p tcp -m state --state NEW -m tcp --dport 3000 -j ACCEPT
  19. -A INPUT -p tcp -m state --state NEW -m tcp --dport 9093 -j ACCEPT
  20. -A INPUT -p tcp -m state --state NEW -m tcp --dport 9100 -j ACCEPT
  21. -A INPUT -j REJECT --reject-with icmp-host-prohibited
  22. -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  23. COMMIT
  24. #启动
  25. systemctl restart iptables.service
  26. systemctl enable iptables.service

七、配置Grafana
7.1 添加Prometheus数据源
docker-compose快速搭建 Prometheus+Grafana监控系统

  1. 2 配置dashboards
    docker-compose快速搭建 Prometheus+Grafana监控系统

说明:可以用自带模板,也可以去https://grafana.com/dashboards,下载对应的模板。

7.3 查看数据
我从网页下载了docker相关的模板:Docker and system monitoring,893
docker-compose快速搭建 Prometheus+Grafana监控系统
输入893,就会加载出下面的信息
docker-compose快速搭建 Prometheus+Grafana监控系统

导入后去首页查看数据
docker-compose快速搭建 Prometheus+Grafana监控系统

八、附录:单独命令启动各容器

  1. #启动prometheus
  2. docker run -d -p 9090:9090 --name=prometheus \
  3. -v /usr/local/src/config/prometheus.yml:/etc/prometheus/prometheus.yml \
  4. -v /usr/local/src/config/node_down.yml:/etc/prometheus/node_down.yml \
  5. prom/prometheus
  6. # 启动grafana
  7. docker run -d -p 3000:3000 --name=grafana grafana/grafana
  8. #启动alertmanager容器
  9. docker run -d -p 9093:9093 -v /usr/local/src/config/config.yml:/etc/alertmanager/config.yml --name alertmanager prom/alertmanager
  10. #启动node exporter
  11. docker run -d \
  12. -p 9100:9100 \
  13. -v "/:/host:ro,rslave" \
  14. --name=node_exporter \
  15. quay.io/prometheus/node-exporter \
  16. --path.rootfs /host
  17. #启动cadvisor
  18. docker run \
  19. --volume=/:/rootfs:ro \
  20. --volume=/var/run:/var/run:rw \
  21. --volume=/sys:/sys:ro \
  22. --volume=/var/lib/docker/:/var/lib/docker:ro \
  23. --publish=8080:8080 \
  24. --detach=true \
  25. --name=cadvisor \
  26. google/cadvisor:latest

发表评论

表情:
评论列表 (有 0 条评论,1369人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Zabbix监控系统

    引言: zabbix是目前系统监控领域的佼佼者,其开源且提供了强大完善的Web界面,并且兼容各种不同的设备和系统,支持多种平台,其背后的公司为Zabbix持续演进提供了技术支持