一、Prometheus 监控系统状态
-
假设有一台应用服务器,你想时刻获取它运行时的参数和状态,比如:
CPU
负载、系统负载、内存消耗、硬盘使用量、网络IO
等等,那么这些都可以使用node_exporter
来收集,并通过Prometheus
来提供收集和展示 -
进入应用服务器下载规划目录,下载 最新版本的
node_exporter
组件# 进入系统规划目录 cd /usr/local/src # 下载最新版本的 node_exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz # 解压到规划安装目录 tar -zxvf node_exporter-1.0.1.linux-amd64.tar.gz -C ../prometheus # 重命名 node_exporter cd /usr/local/prometheus mv node_exporter-1.0.1.linux-amd64/ node_exporter-1.0.1 # 后台启动 node_export nohup ./node_exporter &
-
通过
http://ip:9100/metrics
即可访问到node_exporter
收集到的系统信息# 开放 node_exporter 默认端口 9100 ,提供给 Prometheus 收集系统信息 firewall-cmd --zone=public --add-port=9100/tcp --permanent firewall-cmd --reload
-
node_exporter
自定义参数参考-
node_exporte
基本信息配置# node_exporter监听的端口,默认是9100,若需要修改则通过此参数。 --web.listen-address=":9100" # 获取metric信息的url,默认是/metrics,若需要修改则通过此参数 --web.telemetry-path="/metrics" # 设置日志级别 --log.level="info" # 设置打印日志的格式,若有自动化日志提取工具可以使用这个参数规范日志打印的格式 --log.format="logger:stderr"
-
通过正则表达式来屏蔽或选择某些监控项
# 通过正则表达式忽略某些磁盘的信息收集 --collector.diskstats.ignored-devices="^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$" # 通过正则表达式忽略某些文件系统挂载点的信息收集 --collector.filesystem.ignored-mount-points="^/(dev|proc|sys|var/lib/docker/.+)($|/)" # 通过正则表达式忽略某些文件系统类型的信息收集 --collector.filesystem.ignored-fs-types="^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|fusectl|hugetlbfs|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" # 通过正则表达式忽略某些网络类的信息收集 --collector.netclass.ignored-devices="^$" # 通过正则表达式忽略某些网络设备的信息收集 --collector.netdev.ignored-devices="^$" # 通过正则表达式配置需要获取的网络状态信息 --collector.netstat.fields="^$" # 通过正则表达式配置vmstat返回信息中需要收集的选项 --collector.vmstat.fields="^(oom_kill|pgpg|pswp|pg.*fault).*"
-
-
配置
Prometheus
来收集步骤3
暴露出来的系统信息-
修改
Prometheus
的yml
文件,新增监控node_exporter
收集的信息# 进入 Prometheus 挂载的 prometheus.yml 文件 vim /opt/docker/prometheus/prometheus.yml # 新增监控节点 - job_name: 'node208-metircs' scrape_interval: 5s static_configs: - targets: ['192.169.5.208:9100']
-
配置信息如下
-
重启
Prometheus
docker restart prometheus
-
查看
Prometheus
是否收集到了node_exporter
的暴露的信息
-
-
也可以通过官网提供的采用
Docker
方式安装node_exporter
,但是为了更加精确的监控系统指标,建议采用以上方式进行安装
二、Prometheus 监控数据库状态
-
假设有一台
MySQL
数据库实例的服务器,你需要监控它的运行指标,我们可以在数据库实例的服务器上安装mysql_exporter
来监控该服务器上MySQL
实例的状态 -
进入
MySQL
服务器的规划下载目录,下载 最新版本的mysql_exporter
组件# 进入系统规划目录 cd /usr/local/src # 下载最新版本的 mysql_exporter wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz # 解压到规划安装目录 tar -zxvf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C ../prometheus # 重命名 node_exporter cd /usr/local/prometheus mv mysqld_exporter-0.12.1.linux-amd64/ mysqld_exporter-0.12.1
-
root
用户登录需要被监控的MySQL
数据库实例,创建监控账户# 登录数据库 mysql -u root -p # 创建监控数据库用户 CREATE USER 'exporter'@'%' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3; # 为用户赋权 GRANT PROCESS,REPLICATION CLIENT,SELECT ON *.* TO 'exporter'@'%'; # 刷新配置 FLUSH PRIVILEGES;
-
启动
mysql_exporter
# 在解压后 mysql_exporter 根目录创建 .my.conf 文件并配置数据库连接信息 vim /usr/local/prometheus/mysqld_exporter-0.12.1/.my.conf # 配置连接信息如下 [client] host=192.169.5.207 user=exporter password=123456 [mysqld] port=8001 # 后台启动 #(非必要) export DATA_SOURCE_NAME='exporter:123456@(192.169.5.207:8001)/' nohup /usr/local/prometheus/mysqld_exporter-0.12.1/mysqld_exporter --config.my-cnf='/usr/local/prometheus/mysqld_exporter-0.12.1/.my.cnf' & # 查看启动状态 ss -antpl | grep 9104
-
开放
9104
端口后访问http://ip:9104
效果如下firewall-cmd --zone=public --add-port=9104/tcp --permanent firewall-cmd --reload
-
也可以编写
mysql_exporter.service
文件来通过systemctl
控制启停操作 -
修改
prometheus
的yml
配置文件,收集 步骤5
暴露出来的信息-
修改
prometheus
的yml
文件,新增监控mysql_exporter
收集的信息# 进入 Prometheus 挂载的 prometheus.yml 文件 vim /opt/docker/prometheus/prometheus.yml # 新增监控节点 - job_name: 'node207-mysql' scrape_interval: 5s static_configs: - targets: ['192.169.5.207:9104']
-
配置信息如下
-
重启
Prometheus
docker restart prometheus
-
查看
Prometheus
是否收集到了node_exporter
的暴露的信息
-
-
也可以通过官网提供的采用
Docker
方式安装node_exporter
三、Prometheus 监控应用状态
-
在应用程序的
pom
文件中添加Micrometer
和Prometheus
的桥梁<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> <!-- 此处的版本一定要和 Prometheus 兼容(浏览器访问 http://appip:port/actuator/prometheus 应用程序控制台不报错) --> <version>1.3.6</version> </dependency>
-
在启动类添加
MeterRegistryCustomizer
配置信息@Bean MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) { // 此处的配置名称将会在 Prometheus 的控制面板显示 return (registry) -> registry.config().commonTags("application", applicationName); }
P.S
-
在应用程序的配置信息中暴露注册信息
# 暴露注册信息 management: endpoints: web: exposure: include: '*' endpoint: health: show-details: always
-
启动应用程序并访问
http://appip:port/actuator/prometheus
-
配置
Prometheus
来收集步骤4
暴露出来的系统信息-
修改
Prometheus
的yml
文件,新增监控node_exporter
收集的信息# 进入 Prometheus 挂载的 prometheus.yml 文件 vim /opt/docker/prometheus/prometheus.yml # 新增监控节点 - job_name: 'rms-console-service' # 由于默认 pull 的 uri 是 metrics 所以这里要指定 uri metrics_path: '/actuator/prometheus' scrape_interval: 5s static_configs: - targets: ['192.169.5.247:9002']
-
配置信息如下
-
重启
Prometheus
docker restart prometheus
-
查看
Prometheus
是否收集到了node_exporter
的暴露的信息
-
四、其它监控组件
prometheus
为我们提供了许多监控组件,点击此处 查看组件的具体功能和用法