英文网站建设图片,个人制作网站工具,吉祥又成功的公司名字,怎么做网页截图前言#xff1a;在部署MeterSphere之后#xff0c;很多时候需要看下MeterSphere服务的监控信息#xff0c;虽然有监控告警脚本#xff0c;但还不是太直观#xff0c;所以就结合 PrometheusExporterGrafana 部署一套完整的MeterSphere监控方案。 首先我们先罗列一下需要监控… 前言在部署MeterSphere之后很多时候需要看下MeterSphere服务的监控信息虽然有监控告警脚本但还不是太直观所以就结合 PrometheusExporterGrafana 部署一套完整的MeterSphere监控方案。 首先我们先罗列一下需要监控的容器
服务器的信息或node节点Node-Exporter应用服务的监控(例如api-testtest-track)SpringBoot 自带的 ActuatorMySQL Mysql-ExporterKafka Kafka-Exporter服务器上所有容器的信息cAdvisor
需要声明的是此文章建立在有技术背景并且了解 Prometheus、Exporter、Grafana 等组件有什么作用如果需要了解具体工作原理可以自行查阅资料。
文章结尾有完整的 docker-compose 的 yml 文件可以直接复制完整文件进行安装。
一、使用 Grafana 集成 Node-Exporter 监控服务器资源信息
MeterSphere 安装部署完整之后自带了 Prometheus 和 Node-Exporter 组件所以我们只需要简单的配置安装部署 Grafana就可以进行监控了。 Node-Exporter 可以监控服务器资源的 CPU、内存、磁盘、网络IO等信息。 详细信息可参考https://blog.csdn.net/qq_34556414/article/details/123443187
1.1、确认Node-Exporter是否正常
首先要确认 Prometheus 是否能够获取到服务器的监控数据, Prometheus 端口默认为9090安装部署 MeterSphere 好之后直接访问 http://192.168.xx.xx:9090 即可查看 Prometheus 页面。如果出现访问不了检查防火墙是否关闭端口是否对外暴露查看 Targets 可以看到有9100端口的地址Node-Exporter 默认监听端口为9100如果状态为up即为正常代表可以查看到监控数据。 1.2、安装Grafana
本文章是通过 Docker 的方式进行安装。 注意本次安装grafana版本为9.4.3版本如果安装新版本自行摸索如何操作。
在 /opt/metersphere/data/ 下面创建 grafana 文件目录。
cd /opt/metersphere/data/
mkdir grafana
chmod 777 grafana在 /opt/metersphere 目录下创建并编辑 docker-compose-grafana.yml内容如下。(注意如果是内网部署需要在能访问互联网的机器上下载镜像再进行上传。)
version: 2.1
services:grafana:image: grafana/grafana:9.4.3restart: alwayscontainer_name: grafanavolumes:- ms-grafana-data:/var/lib/grafanaports:- 3000:3000healthcheck:test: [CMD, nc, -zv, localhost, 3000]interval: 6stimeout: 5sretries: 50networks:- ms-networkvolumes:ms-grafana-data:driver_opts:type: nonedevice: ${MS_BASE}/metersphere/data/grafanao: bind执行命令启动 Grafana
docker-compose -f docker-compose-base.yml -f docker-compose-grafana.yml up -dGrafana 默认端口是3000所以我们直接访问 http://192.168.xx.xx:3000 默认账号密码admin/admin 初次登录可以修改密码。 能够访问页面即为安装成功
1.3、添加 Prometheus 数据源
登录 Grafana 之后找到左下角小齿轮然后找到 Data source点击右上角新加数据源选择Prometheus。 设置名字和 Prometheus 地址点击 Save 保存。 1.4、配置 Grafana 监控面板
这边介绍两种方式去配置面板
1.4.1、如果可以访问互联网的话直接导入模板id即可。
找到 Dashboard 点击 Import 这里我们选择的模板为12227直接输入这个id点击Load设置模板名称配置数据源保存即可。 1.4.2、如果访问不了互联网可以直接导入面板的 JSON 文件。
12227_rev1.json https://grafana.com/grafana/dashboards/12227
同样的操作导入 JSON 文件 选择数据源即可 以上两种方式最终得到的结果如下, 至此Node-Exporter 监控已完成
二、使用 Grafana 集成 SpringBoot Actuator 监控容器应用信息
MeterSphere V2 版本之后默认集成了 SpringBoot Actuator 监控所以我们只需要添加配置开启监控即可。
2.1 什么是 SpringBoot Actuator
Spring Boot Actuator 模块提供了生产级别的功能比如健康检查审计指标收集HTTP 跟踪等帮助我们监控和管理 Spring Boot 应用。这个模块是一个采集应用内部信息暴露给外部的模块上述的功能都可以通过HTTP 和 JMX 访问。 因为暴露内部信息的特性Actuator 也可以和一些外部的应用监控系统整合Prometheus, Graphite, DataDog, Influx, Wavefront, New Relic等。这些监控系统提供了出色的仪表板图形分析和警报可帮助你通过一个统一友好的界面监视和管理你的应用程序。 Actuator使用Micrometer与这些外部应用程序监视系统集成。这样一来只需很少的配置即可轻松集成外部的监控系统。 Micrometer 为 Java 平台上的性能数据收集提供了一个通用的 API应用程序只需要使用 Micrometer 的通用 API 来收集性能指标即可。Micrometer 会负责完成与不同监控系统的适配工作。这就使得切换监控系统变得很容易。 对比 Slf4j 之于 Java Logger 中的定位。 2.2 如何开启 MeterSphere 中 Actuator 监控
开启 MeterSphere 中的 Actuator 监控其实很简单在/opt/metersphere/conf/metersphere.properties 添加一行 management.endpoints.enabled-by-defaulttrue 配置即可。 添加完成之后执行 msctl restart 重启服务。
2.3 如何查看 Metrics 监控指标
重启好之后我们访问 Prometheus 地址 http://192.168.xx.xx:9090/ 查看 Targets指标信息会发现有各个容器的监控信息状态为 UP 即为正常。如果是 Down 的需要检查一下自己服务器网络问题了。 需要注意因为我们容器没有暴露相应的端口所以直接在页面上是看不到具体的监控指标信息想看到某一个容器的指标信息也很简单这里提供两种思路
修改某一个容器 docker-compse添加端口映射比如我想查看 api-test 的直接在 docker-compose-api-test.yml 里面添加端口映射 7004:7004 然后重启 api-test 容器即可。直接在 Prometheus 的 Graph 里面查看容器对应的实例名称。比如我想查看 api-test 的那么它的实例名称为 instance:“api-test:7004”, 然后我们去 Graph 查询就可以看到对应的指标信息了。 2.4 如何通过 Grafana 大屏展示
检查如确认开启之后我们开始对接 Grafana。 因为前面在监控服务器资源监控的时候已经对接了数据源这里就不需要对接了。如何对接请参考上面的(如何添加 Prometheus 数据源)章节 这里推荐两个模板模板id为 12900 和 9568 两个模板侧重监控的指标信息有所不同有重合部分可以根据需求修改。 两个模板的区别
12900 主要可以分析应用内的一些信息9568 要分析应用内 JVM 相关的信息
这里还是介绍两种方式
2.4.1 可以访问互联网直接import导入
导入方式跟之前一样选择 Dashboards-Import 输入模板id点击Load选择数据源添加即可。
2.4.2 不可以访问互联网直接通过JSON文件导入
直接提供两个模板的JSON文件可以自行导入 12900_rev3.json 9568_rev1.json https://grafana.com/grafana/dashboards/12900 https://grafana.com/grafana/dashboards/9568
以上两种模板最终结果如下 12900 模板效果图
9568 模板效果图
三、使用 Grafana 集成 Mysql-Exporter 监控信息
因为 MeterSphere 使用的是 Mysql 数据库所以我们也可以通过 Mysql-Exporter来进行监控 MySQL 的相关信息
3.1 什么是MySQL-Exporter
Mysql-Exporter 是一个用于采集 MySQL 指标的监控工具它是开源的可以与 Prometheus 一起使用以便对数据库进行更全面、深入的分析和了解。 Mysql-Exporter 使用 MySQL 的本地客户端库进行数据收集可以轻松地提供 MySQL 服务器的实时监控。它的最新版本通过使用 Percona Toolkit 来获取 MySQL 的各种统计信息包括状态、变量和 InnoDB引擎状态。这些信息可以提供非常有用的洞察力帮助开发人员和管理员更好地了解数据库的性能和运行状况。
3.1 部署 MySQL-Exporter 容器
我们通过 docker-compose 的方式去进行部署放在 /opt/metersphere 目录下面脚本如下
version: 2.1
services:mysqlexporter:image: prom/mysqld-exportercontainer_name: mysqld-exporterrestart: alwaysports:- 9104:9104environment:- DATA_SOURCE_NAMEroot:Password123mysql(192.168.xx.xx:3306)/meterspherevolumes:- /etc/my.cnf:/etc/my.cnfcommand:--collect.auto_increment.columns--collect.binlog_size--collect.global_status--collect.global_variables--collect.info_schema.innodb_metrics--collect.info_schema.innodb_cmp--collect.info_schema.innodb_cmpmem--collect.info_schema.processlist--collect.info_schema.query_response_time--collect.info_schema.tables--collect.info_schema.tablestats--collect.info_schema.userstats--collect.perf_schema.eventswaits--collect.perf_schema.file_events--collect.perf_schema.indexiowaits--collect.perf_schema.tableiowaits--collect.perf_schema.tablelocks--collect.slave_status--config.my-cnf/etc/my.cnfnetworks:- ms-network在/etc/my.cnf 添加一下配置
[client]
host192.168.xx.xx
port3306
userroot
passwordPassword123mysql环境变量配置
DATA_SOURCE_NAME配置MySQL的账号密码以及访问地址和需要监控的数据库信息
监控指标参数
启动参数MySQL版本参数含义collect.auto_increment.columns5.1 从information_schema收集auto_increment列和最大值。collect.binlog_size5.1收集所有已注册的Binlog文件的当前大小collect.engine_innodb_status5.1通过SHOW ENGINE INNODB STATUS收集数据collect.engine_tokudb_status5.6通过SHOW ENGINE TOKUDB STATUS.收集数据collect.global_status5.1通过SHOW GLOBAL STATUS 收集数据默认开启collect.global_variables5.1通过SHOW GLOBAL VARIABLES收集数据默认开启collect.info_schema.clientstats5.5如果被监控的MySQL使用userstat 1运行则此参数需要设置为1以收集客户端统计信息collect.info_schema.innodb_metrics5.6从information_schema.innodb_metrics收集数据。collect.info_schema.innodb_tablespaces5.7从information_schema.innodb_sys_tablespaces收集数据。collect.info_schema.innodb_cmp5.5从information_schema.innodb_cmp收集InnoDB压缩表指标。collect.info_schema.innodb_cmpmem5.5从information_schema.innodb_cmpmem收集InnoDB缓冲池。collect.info_schema.processlist5.1从information_schema.processlist收集线程状态计数。collect.info_schema.processlist.min_time5.1线程状态停留多长时间会被统计。默认值0collect.info_schema.query_response_time5.5如果query_response_time_stats为ON则收集查询响应时间。collect.info_schema.replica_host5.6从information_schema.replica_host_status收集数据。collect.info_schema.tables5.1从information_schema.tables中收集数据。collect.info_schema.tables.databases5.1收集表统计信息的数据库列表或*全部为’的数据库collect.info_schema.tablestats5.1如果被监控的MySQL使用userstat 1运行则设置为true以收集表统计信息。collect.info_schema.schemastats5.1如果被监控的MySQL使用userstat 1运行则设置为true以收集架构统计信息collect.info_schema.userstats5.1如果被监控的MySQL使用userstat 1运行则设置为true以收集用户统计信息。collect.perf_schema.eventsstatements5.6从performance_schema.events_statements_summary_by_digest收集数据。collect.perf_schema.eventsstatements.digest_text_limit5.6规范化语句文本的最大长度。默认值120collect.perf_schema.eventsstatements.limit5.6通过响应时间限制事件语句摘要的数量。预设值250collect.perf_schema.eventsstatements.timelimit5.6限制“ last_seen”事件语句的年龄以秒为单位。预设值86400collect.perf_schema.eventsstatementssum5.7从Performance_schema.events_statements_summary_by_digest汇总中收集指标。collect.perf_schema.eventswaits5.5从Performance_schema.events_waits_summary_global_by_event_name收集指标。collect.perf_schema.file_events5.6从Performance_schema.file_summary_by_event_name收集指标。collect.perf_schema.file_instances5.5从performance_schema.file_summary_by_instance收集指标。collect.perf_schema.indexiowaits5.6从performance_schema.table_io_waits_summary_by_index_usage收集指标。collect.perf_schema.tableiowaits5.6从Performance_schema.table_io_waits_summary_by_table收集指标。collect.perf_schema.tablelocks5.6从Performance_schema.table_lock_waits_summary_by_table收集指标。collect.perf_schema.replication_group_members5.7从Performance_schema.replication_group_members收集指标。collect.perf_schema.replication_group_member_stats5.7 从Performance_schema.replication_group_member_stats收集指标。collect.perf_schema.replication_applier_status_by_worker5.7从performance_schema.replication_applier_status_by_worker收集指标。collect.slave_status5.1从SHOW SLAVE STATUS收集默认情况下启用collect.slave_hosts5.1从SHOW SLAVE HOSTS收集collect.heartbeat5.1从心跳中收集。collect.heartbeat.database5.1从中收集心跳数据的数据库。默认值心跳collect.heartbeat.table5.1从何处收集心跳数据的表。默认值心跳
通用启动参数
NameDescriptionconfig.my-cnf.my.cnf文件的路径。默认值~/.my.cnflog.level日志级别 记录详细程度默认信息exporter.lock_wait_timeout在连接上设置lock_wait_timeout以避免长时间的元数据锁定。默认值2秒exporter.log_slow_filter添加一个log_slow_filter以避免刮擦的慢速查询日志记录。注意Oracle MySQL不支持。web.listen-address监听端口 默认9104web.telemetry-path公开metric的路径 默认/metricsversion打印版本信息
启动 Mysql-Exporter 容器默认端口为 9104
cd /opt/metersphere
docker-compose -f docker-compose-base.yml -f docker-compose-mysql-exporter.yml up -d直接访问 http://192.168.xx.xx:9104 即可看到监控信息
3.2 集成到 Prometheus
安装好采集指标的 MySQL-Exporter 之后需要集成到 Prometheus里面。
找到 /opt/metersphere/conf/prometheus/prometheus.yml添加 Mysql-Exporter 的指标信息 - job_name: mysqlstatic_configs:- targets: [192.168.xx.xx:9104]如果不了解怎么添加 Prometheus 配置请参考https://blog.csdn.net/u013288190/article/details/116804765 配置完成之后重启 Prometheus
docker restart ms-prometheus访问 Prometheus 地址查看 Mysql-Exporter监控信息可以看到状态为 UP 状态即为成功 3.3 通过 Grafana 大屏展示
这里我们选用经典的 MySQL 展示大屏模板id为7362介绍两种方式
3.3.1 可以访问互联网的直接import导入
选择Dashboard-Import-输入7362 点击 Load-选择数据源即可 配置好之后就可以看到 MySQL 的监控信息了 3.3.1.1 配置 Exporter 的 Instance 的值
到这里我们发现一个问题有部分的监控指标是空的展示不出来这是因为这个监控模板展示的信息需要和 Node-Exporter 结合起来使用想要解决这个问题很简单在配置 Prometheus的时候需要让Node-Exporter 的实例名称和 Mysql-Exporter 实例名称一致就好。 为了清晰明了这里我把它配置到同一个 job 里面了。 配置好之后重启一下 Prometheus容器
docker restart ms-prometheus重启好之后我们访问 Prometheus地址可以看到两个 Exporter 的实例名称是一致的。 然后刷新 Grafana 监控面板可以看到对应的地方已经有值了。
3.3.2 不可以访问互联网的直接导入 JSON 文件
如果不能访问互联网的可以直接导入 JSON 文件。 7362_rev5.json https://grafana.com/grafana/dashboards/7362
选择Dashboard-Import-上传JSON文件-选择对应的数据源 添加好之后就可看到面板效果如果有发现一些值没有展示出来请参考上面配置Exporter的Instance的操作。
四、使用 Grafana 集成 Kafka-Exporter 监控信息
4.1 什么是 Kafka-Exporter
Kafka-Exporter 通过 Kafka Protocol Specification 收集 Brokers, Topics 以及 Consumer Groups的相关指标。 kafka exporter代码层借助大量开源库所以功能强大但代码量极少仅600行大致架构如下: Kingpin go的一个命令行库处理用户输入的参数sarama(核心) go实现的kafka客户端连接broker获取相关的指标与元数据kazoo go实现的zk客户端连接kafka的zk集群主要用于zk消费组的lag计算promhttp用于生成 Prometheus HTTP服务器供prometheus pull指标其他组件协助将 sarama 和kazoo获取的指标转换成Prometheus的数据格式
4.2 部署 Kafka-Exporter 容器
我们通过docker-compose的方式去进行部署放在 /opt/metersphere 目录下面脚本如下
version: 2.1
services:kafka-exporter:image: danielqsj/kafka-exportercontainer_name: kafka-exportercommand: --kafka.server192.168.xx.xx:9092ports:- 9308:9308restart: alwaysnetworks:- ms-network默认端口为9308 参数说明
–kafka.serverkafka的连接地址以及端口
执行启动命令
docker-compose -f docker-compose-base.yml -f docker-compose-kafka-exporter.yml up -d部署完成之后看下状态
4.3 集成到Prometheus
确认 Kafka-Exporter 启动好之后需要集成到 Prometheus同样的操作找到/opt/metersphere/conf/prometheus 在prometheus.yml中添加下面的配置
- job_name: kafkastatic_configs:- targets: [192.168.xx.xx:9308]添加好之后重启 Prometheus
docker restart ms-prometheus重启好之后访问 Prometheus地址会看到 Kafka-Exporter状态是好的。 4.4 通过 Grafana 大屏展示
这里推荐一个 Kafka的监控模板同样的介绍两种方式应用 模板id为12326
4.4.1 可以访问互联网的直接 Import导入
导入的方式具体可以参考上面文章写的方法都一样这里不在详细介绍。
4.4.2 不可以访问互联网的直接JSON文件导入
12326_rev2.json https://grafana.com/grafana/dashboards/12326 选择Dashboard-import-上传JSON文件-选择对应的数据源即可
4.4.3 介绍一个好用的kafka的模板
这个模板用到的数据是Spring Boot Actuator 所以如果没有开启的话参考上面的章节开启配置。 监控的内容是各个容器关于 Kafka 消费的情况可以查看到每个 Topic 的消费情况。 模板id为: 11285 同样的方式可以访问互联网的话直接导入即可。 11285_rev1.json https://grafana.com/grafana/dashboards/11285 不可以的访问的话下载json文件导入。 模板效果
五、使用 Grafana 集成 CAdvisor
需要注意的是这里监控的主要是所有docker容器的信息类似与docker stats 命令查看的指标跟上面Spring Boot Actuator 查看应用内部的信息还是有区别的。 写在这里只是提供一种监控容器资源的方案可以自行判断是否安装。
5.1 CAdvisor 是什么
cAdvisor 是谷歌开源的一款通用的容器监控解决方案。cAdvisor 不仅可以采集机器上所有运行的容器信息还提供了基础的查询界面和 HTTP 接口更方便与外部系统结合。所以cAdvisor很快成了容器指标监控最常用组件并且 Kubernetes 也集成了 cAdvisor 作为容器监控指标的默认工具。 简单来讲就是生产级别可用的容器监控方案。
5.2 部署CAdvisor
还是通过容器的方式部署在 /opt/metersphere/ 创建docker-compose-cadvisor.yml文件
version: 2.1
services:cadvisor:image: google/cadvisorcontainer_name: cadvisorvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:roports:- 8888:8080restart: alwaysnetworks:- ms-networkcadvisor 默认端口是8080我改成了8888 启动容器。
docker-compose -f docker-compose-base.yml -f docker-compose-cadvisor.yml up -d5.3 集成到Prometheus
确认 cadvisor 启动好之后需要集成到 Prometheus同样的操作找到/opt/metersphere/conf/prometheus 在prometheus.yml中添加下面的配置
- job_name: cadvisorstatic_configs:- targets: [192.168.xx.xx:8888,192.168.xx.xx:9100]labels:instance: node这里需要解释一下为什么把 Node-Exporter的信息也给集成过来了是因为后面我们在 Grafana 集成的模板需要用到 Node-Exporter中的一些值所以这边改了相同的 Instance名称并且把 Node-Exporter的信息也给集成过来了。
重启 Prometheus
docker restart ms-prometheus查看 Prometheus 的 Targets状态为 UP 即为正常。 5.4 通过 Grafana 大屏展示
推荐一个比较常用的模板id16314 具体导入方式不在多讲跟上面一样。
可以访问互联网直接Import导入
选择Dashboard-Import-输入16314 点击Load-选择数据源即可
不可以访问互联网通过JSON文件导入
16314_rev3.json https://grafana.com/grafana/dashboards/16314 直接下载文件导入即可。
效果如下 六、注意事项
以上就是虚拟机、应用、MySQLKafka、Docker容器的监控方案可以根据实际情况自行选择如何搭配监控。以上方案都是通过 Docker 的方式安装所以如果是内网用户需要提前把对应的镜像下载下来在通过 docker load 的方式安装部署。具体操作百度docker save / load 命令。本文grafana版本是9.4.3Node-Exporter版本是 MeterSphere 自带的其他 Exporter版本都为latest。本文所有命令操作都在 /opt/metersphere 下面执行因为用到MeterSphere自带的一些基础配置。安装好对应的Exporter之后记着要配置一下Prometheus。为了部署更加方便给一个更加全面的 docker-compose-monitor.yml 其中的ip和端口信息需要自行修改。
version: 2.1
services:grafana:image: grafana/grafana:9.4.3restart: alwayscontainer_name: grafanavolumes:- ms-grafana-data:/var/lib/grafanaports:- 3000:3000healthcheck:test: [CMD, nc, -zv, localhost, 3000]interval: 6stimeout: 5sretries: 50networks:- ms-networkmysqlexporter:image: prom/mysqld-exportercontainer_name: mysqld-exporterrestart: alwaysports:- 9104:9104environment:- DATA_SOURCE_NAMEroot:Password123mysql(10.1.12.13:3306)/meterspherevolumes:- /etc/my.cnf:/etc/my.cnfcommand:--collect.auto_increment.columns--collect.binlog_size--collect.global_status--collect.global_variables--collect.info_schema.innodb_metrics--collect.info_schema.innodb_cmp--collect.info_schema.innodb_cmpmem--collect.info_schema.processlist--collect.info_schema.query_response_time--collect.info_schema.tables--collect.info_schema.tablestats--collect.info_schema.userstats--collect.perf_schema.eventswaits--collect.perf_schema.file_events--collect.perf_schema.indexiowaits--collect.perf_schema.tableiowaits--collect.perf_schema.tablelocks--collect.slave_status--config.my-cnf/etc/my.cnfnetworks:- ms-networkkafka-exporter:image: danielqsj/kafka-exportercontainer_name: kafka-exportercommand: --kafka.server10.1.12.13:9092ports:- 9308:9308restart: alwaysnetworks:- ms-networkcadvisor:image: google/cadvisorcontainer_name: cadvisorvolumes:- /:/rootfs:ro- /var/run:/var/run:rw- /sys:/sys:ro- /var/lib/docker/:/var/lib/docker:roports:- 8888:8080restart: alwaysnetworks:- ms-networkvolumes:ms-grafana-data:driver_opts:type: nonedevice: ${MS_BASE}/metersphere/data/grafanao: bind启动命令
docker-compose -f docker-compose-base.yml -f docker-compose-monitor.yml up -d