文章目录

  • 一、Prometheus 监控系统状态
  • 二、Prometheus 监控数据库状态
  • 三、Prometheus 监控应用状态
  • 四、其它监控组件


一、Prometheus 监控系统状态
  1. 假设有一台应用服务器,你想时刻获取它运行时的参数和状态,比如:CPU 负载、系统负载、内存消耗、硬盘使用量、网络 IO 等等,那么这些都可以使用 node_exporter 来收集,并通过 Prometheus 来提供收集和展示
  2. 进入应用服务器下载规划目录,下载 最新版本的 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 &
  1. 通过 http://ip:9100/metrics 即可访问到 node_exporter 收集到的系统信息
# 开放 node_exporter 默认端口 9100 ,提供给 Prometheus 收集系统信息
firewall-cmd --zone=public --add-port=9100/tcp --permanent

firewall-cmd --reload

prometheus 查看待转发的消息 prometheus收集日志_prometheus 查看待转发的消息

  1. 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).*"
  1. 配置 Prometheus 来收集步骤 3 暴露出来的系统信息
  • 修改 Prometheusyml 文件,新增监控 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 的暴露的信息
  1. 也可以通过官网提供的采用 Docker 方式安装 node_exporter ,但是为了更加精确的监控系统指标,建议采用以上方式进行安装
二、Prometheus 监控数据库状态
  1. 假设有一台 MySQL 数据库实例的服务器,你需要监控它的运行指标,我们可以在数据库实例的服务器上安装 mysql_exporter 来监控该服务器上 MySQL 实例的状态
  2. 进入 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
  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;
  1. 启动 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
  1. 开放 9104 端口后访问 http://ip:9104 效果如下
firewall-cmd --zone=public --add-port=9104/tcp --permanent

firewall-cmd --reload

prometheus 查看待转发的消息 prometheus收集日志_linux_02

  1. 也可以编写 mysql_exporter.service 文件来通过 systemctl 控制启停操作
  2. 修改 prometheusyml 配置文件,收集 步骤 5 暴露出来的信息
  • 修改 prometheusyml 文件,新增监控 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 的暴露的信息
  1. 也可以通过官网提供的采用 Docker 方式安装 node_exporter
三、Prometheus 监控应用状态
  1. 在应用程序的 pom 文件中添加 MicrometerPrometheus 的桥梁
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <!-- 此处的版本一定要和 Prometheus 兼容(浏览器访问 http://appip:port/actuator/prometheus  应用程序控制台不报错) -->
    <version>1.3.6</version>
</dependency>
  1. 在启动类添加 MeterRegistryCustomizer 配置信息
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(@Value("${spring.application.name}") String applicationName) {
    // 此处的配置名称将会在 Prometheus 的控制面板显示
    return (registry) -> registry.config().commonTags("application", applicationName);
}

P.S

官方参考文献

  1. 在应用程序的配置信息中暴露注册信息
# 暴露注册信息
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always
  1. 启动应用程序并访问 http://appip:port/actuator/prometheus
  2. 配置 Prometheus 来收集步骤 4 暴露出来的系统信息
  • 修改 Prometheusyml 文件,新增监控 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 为我们提供了许多监控组件,查看组件的具体功能和用法