Prometheus是一款专门用来监控容器的一款软件。 传统的监控软件大多数是依赖于IP的,但是容器没有该固定的IP,再面对容器的时候,传统的监控软件就显得很茫然。

1、监控

什么是监控呢? 运维工程师是无法做到每天24小时时时刻刻盯着服务器,这个时候为了能够立即发现服务器异常,我们就需要有一款专门用来盯着服务器的软件,来帮助运维工程师监控服务器的状态,如果出现服务器异常,能够实时提醒运维工程师。

2、传统的监控有哪些呢?

2.1、top命令

  1. top - 14:55:32 up 12 min, 2 users, load average: 0.19, 0.09, 0.05
  2. Tasks: 88 total, 1 running, 87 sleeping, 0 stopped, 0 zombie
  3. %Cpu(s): 1.2 us, 0.7 sy, 0.0 ni, 98.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  4. KiB Mem : 1881840 total, 1221976 free, 171468 used, 488396 buff/cache
  5. KiB Swap: 0 total, 0 free, 0 used. 1555476 avail Mem
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 2002 root 20 0 680320 14264 2460 S 2.0 0.8 0:03.00 barad_agent
  8. 3832 root 20 0 1003952 34044 18212 S 0.7 1.8 0:02.62 YDService
  9. 1112 root 20 0 218532 4980 2216 S 0.3 0.3 0:00.09 rsyslogd
  10. 14:55:32 当前系统时间
  11. up 系统处于启动状态
  12. 12 min 启动时长
  13. 2 users 当前登录系统的用户数
  14. load average:系统负载

传统的命令监控无法做到实时监控并报警,就需要一款专门的监控软件来帮助我们实现实时监控并报警。

3、Prometheus监控软件

官网:https://prometheus.io/ 特点:

  • 开源免费
  • 适配容器监控

3.1、部署

  1. 1、下载
  2. wget https://github.com/prometheus/prometheus/releases/download/v2.34.0/prometheus-2.34.0.linux-amd64.tar.gz
  3. 2、解压
  4. [root@VM-0-16-centos ~]# tar -xf prometheus-2.25.0.linux-amd64.tar.gz -C /usr/local/
  5. 3、创建一个软连接
  6. [root@VM-0-16-centos prometheus-2.25.0.linux-amd64]# ln -s /usr/local/prometheus-2.25.0.linux-amd64 /usr/local/prometheus
  7. 4、添加环境变量
  8. [root@VM-0-16-centos prometheus]# vim /etc/profile
  9. PROMETHEUS_HOME=/usr/local/prometheus
  10. PATH=$PATH:$PROMETHEUS_HOME
  11. [root@VM-0-16-centos prometheus]# source /etc/profile
  12. 5、注册服务
  13. [root@VM-0-16-centos ~]# wget http://106.13.81.75/prometheus.service
  14. [root@VM-0-16-centos ~]# cat /usr/lib/systemd/system/prometheus.service
  15. [Unit]
  16. Description=Prometheus
  17. [Service]
  18. ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.enable-lifecycle
  19. Restart=on-failure
  20. [Install]
  21. WantedBy=multi-user.target
  22. [root@VM-0-16-centos ~]# systemctl daemon-reload
  23. [root@VM-0-16-centos ~]# systemctl start prometheus
  24. [root@VM-0-16-centos ~]# systemctl status prometheus

4、Prometheus监控的方式

image.png

4.1、获取监控数据端

1、软件自身携带metrics接口

也就是软件在内部已经集成了metrics接口,promethes可以通过软件自身携带的metrics接口获取软件的监控数据,进而实现监控。

2、依赖Exporter插件创建一个个metrics接口

相对于拥有metrics接口的软件而言,大多数软件是没有自带metrics接口的,那么这个时候如果需要使用prometheus来监控软件,就需要一个与之相对应的exporter插件,来为其提供一个metrics接口。

4.2、存储监控数据

对于Prometheus而言,存储监控数据的数据库是TSDB时序数据库(科普:时序数据库是一种高性能的数据库,相对于MySQL数据库而言,其速度要比MySQL数据库快N多倍,同时MySQL数据库在处理超过2000万行数据的内容时,延时非常严重,TSDB数据库处理的数据是TB级)

4.3、容器化

如果我们将Prometheus容器化了之后,那么prometheus的监控流程会有所变化。

4.4、展现数据

通常采用PromeQL(科普:PromeQL是prometheus中的SQL语言,主要是用来查询Prometheus中的监控数据的)来展示数据。

5、使用Prometheus监控Linux主机

上面我们已经说过了,Promentheus监控是需要metrics接口的。Linux主机是不携带Metrics接口的,所以我们需要部署一个Linux主机的Exporter,来为其提供一个metrics接口。

5.1、部署Node Exporter

  1. 1、下载node_exporter
  2. [root@VM-0-16-centos ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
  3. 2、安装
  4. [root@VM-0-16-centos ~]# tar -xf node_exporter-1.1.2.linux-amd64.tar.gz
  5. [root@VM-0-16-centos ~]# mv node_exporter-1.1.2.linux-amd64/node_exporter /usr/local/bin/
  6. 3、注册node-exporter服务
  7. [root@VM-0-16-centos ~]# mv node-exporter.service /usr/lib/systemd/system/
  8. [root@VM-0-16-centos ~]# cat /usr/lib/systemd/system/node-exporter.service
  9. [Unit]
  10. Description=This is prometheus node exporter
  11. After=node_exporter.service
  12. [Service]
  13. Type=simple
  14. ExecStart=/usr/local/bin/node_exporter
  15. ExecReload=/bin/kill -HUP
  16. KillMode=process
  17. Restart=on-failure
  18. [Install]
  19. WantedBy=multi-user.target
  20. [root@VM-0-16-centos ~]# systemctl daemon-reload
  21. [root@VM-0-16-centos ~]# systemctl start node-exporter

5.2、加入prometheus

  1. [root@VM-0-16-centos ~]# vim /usr/local/prometheus/prometheus.yml
  2. - job_name: 'Node-Exporter'
  3. static_configs:
  4. - targets:
  5. - '192.168.0.16:9100'
  6. [root@VM-0-16-centos ~]# systemctl restart prometheus

image.png

6、使用Prometheus监控MySQL数据库

MySQL数据库也是没有Metrices接口的。

6.1、部署MySQL Exporter

  1. 1、下载
  2. wget https://ghproxy.com/https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
  3. 2、解压
  4. [root@VM-0-16-centos opt]# tar -xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
  5. [root@VM-0-16-centos opt]# mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/local/bin/
  6. 3、安装数据库
  7. [root@VM-0-16-centos opt]# yum install mariadb* -y
  8. [root@VM-0-16-centos opt]# systemctl start mariadb
  9. 4、创建一个远程链接用户
  10. MariaDB [(none)]> grant all privileges on *.* to 'moon'@'%' identified by '123' with grant option;
  11. Query OK, 0 rows affected (0.00 sec)
  12. MariaDB [(none)]> flush privileges;
  13. Query OK, 0 rows affected (0.00 sec)
  14. MariaDB [(none)]> exit
  15. Bye
  16. 5、创建一个MySQL-Exporter的配置文件
  17. [root@VM-0-16-centos ~]# vim /root/.my.cnf
  18. [root@VM-0-16-centos ~]# cat /root/.my.cnf
  19. [client]
  20. host=127.0.0.1
  21. user=moon
  22. password=123
  23. 6、注册mysql-exporter服务
  24. [root@VM-0-16-centos ~]# cat /usr/lib/systemd/system/mysqld-exporter.service
  25. [Unit]
  26. Description=Prometheus
  27. [Service]
  28. ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/root/.my.cnf --web.listen-address=:9104
  29. Restart=on-failure
  30. [Install]
  31. WantedBy=multi-user.target
  32. [root@VM-0-16-centos ~]# systemctl daemon-reload
  33. [root@VM-0-16-centos ~]# systemctl start mysqld-exporter.service
  34. [root@VM-0-16-centos ~]# systemctl status mysqld-exporter.service

6.2、将mysql-exporter加入prometheus

  1. [root@VM-0-16-centos ~]# vim /usr/local/prometheus/prometheus.yml
  2. - job_name: 'MySQL-Exporter'
  3. static_configs:
  4. - targets:
  5. - '192.168.0.16:9104'
  6. [root@VM-0-16-centos ~]# systemctl restart prometheus

image.png