Linux云计算架构-搭建prometheus+grafana云平台监控系统

Dear 丶 2022-11-28 13:36 524阅读 0赞

文章目录

  • Linux云计算架构-搭建prometheus+grafana云平台监控系统
      1. prometheus介绍
      1. prometheus架构原理
      • 2.1 prometheus架构组成
      • 2.2 prometheus架构工作流
      1. 部署promethues云平台监控系统
      • 3.1 下载安装包
      • 3.2 部署prometheus server
      • 3.3 部署exporter(出口节点)
      1. 使用grafana美化prometheus
      • 4.1 安装grafana
      • 4.2 美化prometheus
      1. 效果图
      • 5.1 系统状态
      • 5.2 mysql数据库状态
      1. 调整仪表盘监控面板

Linux云计算架构-搭建prometheus+grafana云平台监控系统

1. prometheus介绍

prometheus(普罗米修斯),是一套结合了监控、报警、时间序列数据库为一体的开源监控系统。常用于doker、mesos、kubernetes容器管理系统中。

监控原理:通过http协议周期性的获取被监控组件的状态。被监控组件只需提供相应的http接口即可,不需要任何的SDK或者其他的集成过程。

被监控组件提供状态信息的http接口称之为exporter
目前互联网公司大部分的组件都有exporter可以直接使用。

相对于nagios和zabbix的监控界面,prometheus的监控界面更为美观。

2. prometheus架构原理

promethues架构是promethues及其一些生态系统组件的整体架构。

2.1 prometheus架构组成

在这里插入图片描述

prometheus server:是prometheus组件的核心部分,负责获取监控数据,并对其存储和查询。可以通过静态配置管理监控目标,也可以配置service discovery(服务发现)的方式动态管理监控目标,并从这些目标中获取数据。prometheus server是一个实时数据库,将采集的监控数据以时间序列的方式存储到本地磁盘中。对外提供自定义的promQL,实现对数据的查询和分析。prometheus server还可以从其他的prometheus server实例中获取数据。

exporter:被监控组件提供监控数据的接口,使得监控数据通过http服务的形式展示给prometheus server。而prometheus server通过访问exporter提供的endpoint端口,就可以获取到监控数据。
exporter一般分为2类:
①直接采集:支持prometheus,直接采集被监控组件的信息。
②间接采集:不直接支持prometheus,通过prometheus提供的针对该监控组件的监控采集程序来采集被监控组件的数据。

alertmanager:在prometheus server中支持基于promQL创建告警规则,如果满足promQL定义的规则,就会产生告警。常见接受方式为:邮件,webhook。【类似zabbix中的触发器】

pushgateway:prometheus数据采集基于prometheus server从exporter中pull(拉)数据,这必须保持prometheus和exporter之间的通信。若不允许两者之间的通信,可以使用pushgateway来进行中转,即被监控组件主动推数据到pushgateway上,然后pushgateway再将数据发送到promethues server。

2.2 prometheus架构工作流

  1. promethues server获取metrics(指标)
    ①从配置好的jobsexporter中拉取metrics
    ②接受pushgateway发送过来的metrics
    ③从其他promethues server中拉取metrics
  2. promethues server处理metrics
    ①本地存储metrics
    ②运行定义好的alerts.rules
    ③满足规则,向alertmanager推送警报;不满足规则,仅记录新的时间序列。
  3. alertmanager处理警报

    ①根据配置文件,对接受的警报进行处理,发出告警。

  4. 图形界面对数据进行可视化。

3. 部署promethues云平台监控系统

prometheus云平台监控系统拓扑图:
在这里插入图片描述

3.1 下载安装包

  1. # 下载以下6个tar包,国内的网不一定下的到。
  2. # 下载地址:https://prometheus.io/download/
  3. # premetheus server和alertmanager下载
  4. https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz
  5. https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
  6. # mysqld_exporter、node_exporter、pushgateway下载
  7. https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz
  8. https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
  9. https://github.com/prometheus/pushgateway/releases/download/v1.2.0/pushgateway-1.2.0.linux-amd64.tar.gz
  10. # grafana下载
  11. https://dl.grafana.com/oss/release/grafana-7.1.3-1.x86_64.rpm
  12. # 这个地址比较快
  13. https://mirrors.huaweicloud.com/grafana/7.1.3/grafana-7.1.3.linux-amd64.tar.gz
  14. [root@master prometheus]# pwd
  15. /root/prometheus
  16. [root@master prometheus]# ls
  17. alertmanager-0.21.0.linux-amd64.tar.gz node_exporter-1.0.1.linux-amd64.tar.gz
  18. grafana-7.1.3.linux-amd64.tar.gz prometheus-2.20.1.linux-amd64.tar.gz
  19. mysqld_exporter-0.12.1.linux-amd64.tar.gz pushgateway-1.2.0.linux-amd64.tar.gz

3.2 部署prometheus server

  1. # 安装epel扩展源
  2. [root@master ~]# yum install epel-release -y
  3. # 安装go语言环境
  4. # go(golang)是goolge开发的一种静态强类型、编译型、并发型、具有垃圾回收功能的编程语言。
  5. [root@master ~]# yum install go -y
  6. [root@master ~]# go version
  7. go version go1.13.14 linux/amd64
  8. # 直接解压到/usr/local/目录下即可使用
  9. [root@master ~]# tar xzf /root/prometheus/prometheus-2.20.1.linux-amd64.tar.gz -C /usr/local/
  10. [root@master ~]# ll -d /usr/local/prometheus-2.20.1.linux-amd64/
  11. drwxr-xr-x. 4 3434 3434 144 8 6 03:42 /usr/local/prometheus-2.20.1.linux-amd64/
  12. # 修改prometheus的配置文件,最后加即可。
  13. # yml语法注重缩进
  14. vim prometheus.yml
  15. - job_name: system-status # 监控项,监控系统状态
  16. static_configs:
  17. - targets: ['192.168.8.178:9100'] # 监控主机IP和端口号
  18. labels:
  19. instance: server-status
  20. - job_name: mysql-status # 监控mysql状态
  21. static_configs:
  22. - targets: ['192.168.8.178:9104'] #监控主机IP和端口号
  23. labels:
  24. instance: server-mysql # 实例名,用于grafana
  25. # 启动prometheus,并放到后台运行
  26. [root@master ~]# cd /usr/local/prometheus-2.20.1.linux-amd64/
  27. [root@master prometheus-2.20.1.linux-amd64]# ./prometheus --config.file=prometheus.yml &
  28. ===========================================
  29. & 前台进程放到后台运行
  30. jobs 查看当前的后台进程
  31. fg 后台序号 后台进程放到前台运行
  32. ctrl+z 前台进程放到后台运行,并停止
  33. bg 后台进程继续运行
  34. ctrl+c 退出前台进程
  35. ===========================================
  36. # 如果不用&,表示前台运行。
  37. # 看到下面这句就说明启动成功了
  38. level=info ts=2020-08-17T14:17:25.259Z caller=main.go:652 msg="Server is ready to receive web requests."
  39. # 按了ctrl+c退出,即关闭了。
  40. level=info ts=2020-08-17T14:21:12.348Z caller=main.go:767 msg="See you next time!"
  41. # 由于prometheus服务器占用9090号端口,故防火墙要开放9090号端口
  42. [root@master ~]# firewall-cmd --permanent --zone=public --add-port=9090/tcp
  43. success
  44. [root@master ~]# firewall-cmd --reload
  45. success
  46. # 查看prometheus的web界面
  47. http://192.168.8.177:9090/

在这里插入图片描述
由于还未配置node和mysql的exporter,故获取不到数据。
在这里插入图片描述

  1. [root@master prometheus-2.20.1.linux-amd64]# cat prometheus.yml
  2. # my global config
  3. global:
  4. scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  5. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  6. # scrape_timeout is set to the global default (10s).
  7. # Alertmanager configuration
  8. alerting:
  9. alertmanagers:
  10. - static_configs:
  11. - targets:
  12. # - alertmanager:9093
  13. # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
  14. rule_files:
  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. # metrics_path defaults to '/metrics'
  23. # scheme defaults to 'http'.
  24. static_configs:
  25. - targets: ['localhost:9090']
  26. - job_name: system-status # 监控项,监控系统状态
  27. static_configs:
  28. - targets: ['192.168.8.178:9100'] # 监控主机IP和端口号
  29. labels:
  30. instance: server-status
  31. - job_name: mysql-status # 监控mysql状态
  32. static_configs:
  33. - targets: ['192.168.8.178:9104'] #监控主机IP和端口号
  34. labels:
  35. instance: server-mysql # 实例名,用于grafana
  36. # 监控多个IP地址
  37. ['192.168.8.100:9100','192.168.8.101:9100']

3.3 部署exporter(出口节点)

常用exporter:
node_exporter监控系统性能和运行状态
mysqld_exporter监控mysql数据库服务
snmp_exporter监控网络设备

  1. # 在被监控主机上配置以下2个exporter出口节点,即接口。用于采集被监控主机上对应的状态。
  2. # 传输tar包
  3. [root@master prometheus]# scp /root/prometheus/node_exporter-1.0.1.linux-amd64.tar.gz 192.168.8.178:/opt/
  4. [root@master prometheus]# scp /root/prometheus/mysqld_exporter-0.12.1.linux-amd64.tar.gz 192.168.8.178:/opt/
  5. 1. 配置node_exporter
  6. [root@client ~]# tar xzf /opt/node_exporter-1.0.1.linux-amd64.tar.gz -C /usr/local/
  7. [root@client ~]# /usr/local/node_exporter-1.0.1.linux-amd64/node_exporter &
  8. [root@client ~]# netstat -antup | grep 9100
  9. tcp6 0 0 :::9100 :::* LISTEN 10098/node_exporter
  10. tcp6 0 0 192.168.8.178:9100 192.168.8.177:52894 ESTABLISHED 10098/node_exporter
  11. 2. 配置mysqld_exporter
  12. # 如果有类似报错:Access denied for user 'zabbix'@'localhost' (using password: YES)
  13. # 估计要重置对应用户密码。
  14. [root@client ~]# mysql -uroot -p
  15. Enter password:
  16. Welcome to the MariaDB monitor. Commands end with ; or \g.
  17. Your MariaDB connection id is 4
  18. Server version: 5.5.60-MariaDB MariaDB Server
  19. Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
  20. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  21. MariaDB [(none)]> use mysql
  22. Reading table information for completion of table and column names
  23. You can turn off this feature to get a quicker startup with -A
  24. Database changed
  25. MariaDB [mysql]> grant replication client,process on *.* to 'mysql_monitor'@'localhost' identified by '123456';
  26. Query OK, 0 rows affected (0.05 sec)
  27. MariaDB [mysql]> grant select on *.* to 'mysql_monitor'@'localhost';
  28. Query OK, 0 rows affected (0.00 sec)
  29. MariaDB [mysql]> exit
  30. Bye
  31. # 解压mysql_exportor
  32. [root@client ~]# tar xzf /opt/mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/
  33. # 使用指定数据库用户进行收集数据
  34. [root@client ~]# vim /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
  35. [root@client ~]# cat /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
  36. [client]
  37. user=mysql_monitor
  38. password=123456
  39. # 启动mysql_exportor,看到以下内容说明启动成功。
  40. [root@client ~]# /usr/local/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf="/usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf" &
  41. [1] 20812
  42. [root@client ~]# INFO[0000] Starting mysqld_exporter (version=0.12.1, branch=HEAD, revision=48667bf7c3b438b5e93b259f3d17b70a7c9aff96) source="mysqld_exporter.go:257"
  43. INFO[0000] Build context (go=go1.12.7, user=root@0b3e56a7bc0a, date=20190729-12:35:58) source="mysqld_exporter.go:258"
  44. INFO[0000] Enabled scrapers: source="mysqld_exporter.go:269"
  45. INFO[0000] --collect.global_status source="mysqld_exporter.go:273"
  46. INFO[0000] --collect.global_variables source="mysqld_exporter.go:273"
  47. INFO[0000] --collect.slave_status source="mysqld_exporter.go:273"
  48. INFO[0000] --collect.info_schema.innodb_cmp source="mysqld_exporter.go:273"
  49. INFO[0000] --collect.info_schema.innodb_cmpmem source="mysqld_exporter.go:273"
  50. INFO[0000] --collect.info_schema.query_response_time source="mysqld_exporter.go:273"
  51. INFO[0000] Listening on :9104 source="mysqld_exporter.go:283

可以看到,prometheus server已经可以从远程主机上获取到系统状态信息和mysql数据库信息了。都为up了。
在这里插入图片描述

  1. # 查看下端口,监听正常
  2. [root@client ~]# netstat -antup | grep 9100
  3. tcp6 0 0 :::9100 :::* LISTEN 10098/node_exporter
  4. tcp6 0 0 192.168.8.178:9100 192.168.8.177:50488 ESTABLISHED 10098/node_exporter
  5. [root@client ~]# netstat -antup | grep 9104
  6. tcp6 0 0 :::9104 :::* LISTEN 20812/mysqld_export
  7. tcp6 0 0 192.168.8.178:9104 192.168.8.177:39890 ESTABLISHED 20812/mysqld_export

至此为止,prometheus云平台监控系统已经部署完毕了。

4. 使用grafana美化prometheus

如果监控看的是以上界面,那怎么可以说prometheus的界面比zabbix好看呢?这时需要使用grafana美化工具进行美化下。

4.1 安装grafana

  1. [root@master ~]# ll /root/prometheus/grafana-7.1.3.linux-amd64.tar.gz
  2. -rw-r--r--. 1 root root 52611015 8 6 12:55 /root/prometheus/grafana-7.1.3.linux-amd64.tar.gz
  3. [root@master ~]# tar xzf /root/prometheus/grafana-7.1.3.linux-amd64.tar.gz -C /usr/local/
  4. [root@master ~]# cd /usr/local/grafana-7.1.3/
  5. # 后台运行grafana
  6. [root@master grafana-7.1.3]# ./bin/grafana-server &
  7. # 可以看到后台运行的已经有两个程序了。
  8. [root@master grafana-7.1.3]# jobs
  9. [1]- 运行中 ./prometheus --config.file=prometheus.yml &(工作目录:/usr/local/prometheus-2.20.1.linux-amd64)
  10. [2]+ 运行中 ./bin/grafana-server &
  11. # 防火墙开放3000端口号
  12. [root@master grafana-7.1.3]# firewall-cmd --permanent --zone=public --add-port=3000/tcp
  13. success
  14. [root@master grafana-7.1.3]# firewall-cmd --reload
  15. success
  16. # 还是不懂的,可以参考以下网址:
  17. https://grafana.com/docs/grafana/latest/installation/rpm/

访问:http://192.168.8.177:3000/login,可以看到以下内容。
初始账号密码:admin/admin
在这里插入图片描述
修改初始密码:
在这里插入图片描述
登录进来的首页如下:
在这里插入图片描述

4.2 美化prometheus

用ie打开这个grafana界面兼容性有问题。我这里用谷歌展示。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
添加系统状态信息和mysql数据库信息的仪表盘:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过以上查找,可以看到两个仪表盘的ID分别是:8919 7362
导入系统状态的仪表盘:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
导入mysql数据库信息的仪表盘:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上就是系统状态和mysql数据库状态信息的监控面板了。

5. 效果图

5.1 系统状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 mysql数据库状态

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 调整仪表盘监控面板

导入仪表盘模板后,最好不要对其删除。先了解仪表盘内各监控内容,然后选择性的删除。因为想要添加是要写查询的,不好写。
在这里插入图片描述
以上就是prometheus监控系统的内容了,对于一些其他的监控实战,可以关注博主,后续会有。

发表评论

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

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

相关阅读

    相关 计算平台架构

    云计算的体系结构由5部分组成,分别为应用层,平台层,资源层,用户访问层和管理层,云计算的本质是通过网络提供服务,所以其体系结构以服务为核心。 如下图: ![20110722