Prometheus:更换数据源、黑盒探针、进程监控、中间件监控

1 项目目标

(1)实操更换grafana数据源为MySQL

(2)实操安装并应用mysql_exporter

(3)实操安装并应用blackbox_exporter

(4)实操安装并应用process_exporter

2 项目准备

2.1 规划节点

|----------------|-----------|------|
| 主机名 | 主机IP | 节点规划 |
| prome-master01 | 10.0.1.10 | 服务端 |
| prome-node01 | 10.0.1.20 | 客户端 |

2.2 基础准备

环境准备:Prometheus环境、grafana环境

mysql环境,之前写过一篇博客 MySQL 8.0的三种安装方式

3 项目实施

3.1 grafana db替换mysql数据源

vim /etc/grafana/grafana.ini

修改以下内容

创建一个grafana表

[root@prome-node-01 ~]# mysql -uroot -p000000
mysql> CREATE DATABASE IF NOT EXISTS grafana DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

重启grafana

systemctl restart grafana-server

访问IP:3000 发现要重新配置grafana,说明数据库已经迁移到mysql中。

不使用sqllite的原因是因为没有mysql的性能好

3.2 安装使用mysql_exporter

mysql_exporter 是一个用于收集 MySQL 或 MariaDB 数据库相关指标的工具,它需要连接到数据库并具有相应的权限。它的作用主要包括监控数据库的性能和资源利用率,以便及时发现和解决问题,保证数据库的稳定运行。

3.2.1 mysql_exporter安装

去这里找最新版的下载。Releases · prometheus/mysqld_exporter (github.com)

安装mysql_exporter

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.15.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv mysqld_exporter-0.15.0.linux-amd64/ mysqld_exporter

cat >/usr/lib/systemd/system/mysqld_exporter.service <<EOF
[Unit]
Description=mysqld_exporter Exporter
Wants=network-online.target
After=network-online.target

[Service]
Environment=DATA_SOURCE_NAME=exporter:123123@tcp/
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=mysqld_exporter
[Install]
WantedBy=default.target
EOF

创建一个mysql用户

mysql -uroot -p000000
CREATE USER 'exporter'@'%' IDENTIFIED BY '123123' ;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'%';
FLUSH PRIVILEGES;

创建配置文件

cat > .my.cnf <<EOF
[client]
user=exporter
password=123123
EOF

启动mysql_exporter

systemctl start mysqld_exporter
systemctl status mysqld_exporter
systemctl enable mysqld_exporter

编辑prometheus.yml,添加一个job

- job_name: mysqld_exporter
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - 10.0.1.10:9104

[root@prome-node-01 prometheus]# systemctl daemon-reload
[root@prome-node-01 prometheus]# systemctl restart prometheus

grafana导入ID:11323模版

题外话:行面板Row

看到mysql有很多title,然后展开或者折叠。

如果面板比较多,这样还是挺有好处,可以把当前不关心的监控面板先折叠。

另外这种是懒加载的,只有展示的时候,才会加载数据,如果指标太多,只展开自己关注的面板,在性能上也能降低一些影响。

在这里即可添加。

MySQL关键指标说明

|--------|---------------------------------------------|----------------------------------------------|
| 类型 | 指标名称 | 说明 |
| 可用性 | mysql_up | 表示MySQL实例是否已停机。 |
| 可用性 | mysql_global_status_uptime | 表示数据库正常运行的时长,通常使用该指标配置告警,监控运行少于半小时的MySQL实例。 |
| 数据库连接 | mysql_global_status_connection_errors_total | 连接错误是数据库中的主要错误之一,通过该指标可以查看到具体连接错误信息以及错误连接次数。 |
| 数据库连接 | mysql_global_status_threads_connected | MySQL实例请求已经连接的线程数。 |
| 数据库连接 | mysql_global_status_threads_running | MySQL实例请求运行中的线程数。 |
| 数据库连接 | mysql_global_status_max_used_connections | MySQL实例最大连接记录统计。 |
| 数据库连接 | mysql_global_variables_max_connections | MySQL实例的最大连接数,若超过该连接数之后有新的请求到来,就会拒绝连接。 |
| 数据库连接 | mysql_global_status_aborted_connects | 异常中断的连接(尝试连接)。 |
| 数据库连接 | mysql_global_status_aborted_clients | 异常中断的连接(超时)。 |
| 查询 | mysql_global_status_slow_queries | MySQL实例慢查询统计。 |
| 查询 | mysql_global_status_queries | MySQL实例当前查询QPS。 |
| 流量 | mysql_global_status_bytes_received | 入站流量。 |
| 流量 | mysql_global_status_bytes_sent | 出站流量。 |
| 文件 | mysql_global_status_opened_files | 正在打开的文件统计。 |
| 文件 | mysql_global_status_open_files | MySQL已经打开的文件统计。 |
| 文件 | mysql_global_variables_open_files_limit | 允许打开的文件统计。 |
| 文件 | mysql_global_status_innodb_num_open_files | Innodb打开的文件统计。 |

3.3 黑盒探针blackbox

黑盒探针(Blackbox Exporter)是 Prometheus 生态系统中的一个组件,它的作用是允许 Prometheus 通过执行自定义的探测脚本来监控黑盒服务。这里的"黑盒"指的是那些不提供 Prometheus 指标接口的服务或系统,例如 SMTP 服务器、FTP 服务器、HTTP 服务等。

  1. 服务发现:Blackbox Exporter 可以自动发现服务,无需 Prometheus 直接配置目标。
  2. 自定义探测:用户可以编写自定义的探测脚本来检查服务的可用性、响应时间等。
  3. 协议支持:支持多种协议的探测,如 HTTP、HTTPS、SMTP、POP3、IMAP、TCP、DNS 等。
  4. 指标收集:收集探测过程中的各种指标,如探测的成功率、响应时间、HTTP 状态码等。
3.3.1 黑盒探针安装

去这里找最新版的下载。Releases · prometheus/blackbox_exporter (github.com)

wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.25.0/blackbox_exporter-0.25.0.linux-amd64.tar.gz
tar xzvf blackbox_exporter-0.25.0.linux-amd64.tar.gz -C /usr/local
cd /usr/local/
mv blackbox_exporter-0.25.0.linux-amd64/ blackbox_exporter

vim /lib/systemd/system/blackbox_exporter.service
[Unit]
Description=Prometheus Blackbox Exporter
After=network.target

[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/blackbox_exporter/blackbox_exporter --config.file=/usr/local/blackbox_exporter/blackbox.yml --web.listen-address=:9115
Restart=on-failure

[Install]
WantedBy=multi-user.target

systemctl start blackbox_exporter
systemctl enable blackbox_exporter

访问IP:9115

3.3.2 黑盒探测http

http 探针是进行黑盒监控时最常用的探针之一,通过 http 探针能够网站或者 http 服务建立有效的监控,包括其本身的可用性,以及用户体验相关的如响应时间等等。除了能够在服务出现异常的时候及时报警,还能帮助运维分析和优化网站体验。

修改配置文件

[root@prome-node-01 ~]# vim /usr/local/prometheus/prometheus.yml
- job_name: 'blackbox-http'
    # metrics的path 注意不都是/metrics
    metrics_path: /probe
    # 传入的参数
    params:
      module: [http_2xx]  # Look for a HTTP 200 response.
      target: [prometheus.io,www.baidu.com,10.0.1.10:3000]
    static_configs:
      - targets:
        - 10.0.1.10:9115
[root@prome-node-01 ~]# systemctl daemon-reload
[root@prome-node-01 ~]# systemctl restart prometheus

登录到Prometheus的target上查看。

发现instance没有另外两个。

可以探测多实例,修改Prometheus配置文件,包含http和ssh:

- job_name: 'blackbox-http'
    # metrics的path 注意不都是/metrics
    metrics_path: /probe
    # 传入的参数
    params:
      module: [http_2xx]  # Look for a HTTP 200 response.
    static_configs:
      - targets:
        - http://prometheus.io    # Target to probe with http.
        - https://www.baidu.com   # Target to probe with https.
        - http://10.0.1.10:3000   # Target to probe with http on port 3000.
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 127.0.0.1:9115  # The blackbox exporter's real hostname:port.

  - job_name: 'blackbox-ssh'
    # metrics的path 注意不都是/metrics
    metrics_path: /probe
    # 传入的参数
    params:
      module: [ssh_banner]  # Look for a HTTP 200 response.
    static_configs:
      - targets:
        - 10.0.1.10:22    # Target to probe with http.
        - 10.0.1.20:22   # Target to probe with https.
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 10.0.1.10:9115  # The blackbox exporter's real hostname:port.

再次查看即可查看到三个。

到grafana添加dashboard ID:13659

http trace中对于http各个状态的描述

  • dns解析时间: DNSDone-DNSStart
  • tls握手时间: gotConn - DNSDone
  • tls connect连接时间: connectDone - DNSDone
  • 非tls connect连接时间: gotConn - DNSDone
  • processing 服务端处理时间: responseStart - gotConn
  • transfer 数据传输时间: end - responseStart

黑盒探针http监控指标

  • HTTP状态码: probe_http_status_code 表示 HTTP 响应的状态码,用于判断请求是否成功 11。
  • 响应时间: probe_http_duration_seconds 表示 HTTP 请求各个阶段的处理耗时,例如连接、处理、解析、TLS 握手、数据传输等。
  • SSL使用情况: probe_http_ssl 表示最终重定向是否使用了 SSL。
  • 内容长度: probe_http_content_length 表示 HTTP 响应内容的长度。
  • 重定向次数: probe_http_redirects 表示请求过程中发生重定向的次数。
  • TLS版本信息: probe_tls_version_info 表示使用的 TLS 版本信息。
  • SSL证书过期时间: probe_ssl_earliest_cert_expiry 表示 SSL 证书的最早过期时间。
  • HTTP协议版本: probe_http_version 表示 HTTP 响应使用的协议版本。
  • DNS查询耗时: probe_dns_lookup_time_seconds 表示 HTTP 拨测中的 DNS 查询耗时 。
  • 拨测耗时: probe_duration_seconds 表示拨测耗时 。
  • 拨测结果: probe_success 表示拨测是否成功。
3.3.3 黑盒探测ssh

查看target

ssh探测过程说明

prometheus --> blackbox_exporter 使用配置 module: [ssh_banner] --> http://10.0.1.10:9115/probe?module=ssh_banner&target=10.0.1.10%3A22  --> 10.0.1.10:22

3.4 进程探测

3.4.1 部署进程探测process_exporter

去这里找最新版的下载。

Releases · ncabatoff/process-exporter (github.com)

wget https://github.com/ncabatoff/process-exporter/releases/download/v0.8.3/process-exporter-0.8.3.linux-amd64.tar.gz
tar xf process-exporter-0.8.3.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv process-exporter-0.8.3.linux-amd64/ process_exporter
vim /usr/lib/systemd/system/process_exporter.service
[Unit]
Description=process-exporter Exporter
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/process_exporter/process-exporter -config.path=/usr/local/process_exporter/process-exporter.yaml
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=process-exporter
[Install]
WantedBy=default.target

vim /usr/local/process_exporter/process-exporter.yaml
process_names:
  - name: "{{.Comm}}"
    cmdline:
    - '.+'

systemctl enable process_exporter.service --now
3.4.2 process-exporter的配置

process_names是个数组,每个成员表示一个分组。

name是分组的名称,这里使用模版。cmdline用于对分组中的进程进行过滤,这里的正则表达式就表示过滤所有进程。

因此,上述配置文件的含义是:采集所有进程的指标数据,当遍历到某个进程时,获取该进程的进程名,然后放到进程名对应的分组。

name字段可以使用固定的字符串,也可以使用以下模版:

  • {{.Comm}}:进程名
  • {{.ExeBase}}:可执行文件的文件名,与进程的区别是,进程名有长度15的限制
  • {{.ExeFull}}:可执行文件的全路径
  • {{.Username}}:进程的有效用户名
  • {{.Matches}}:用正则匹配cmdline等字段时得到的匹配项的map,例如下面的Cfgfile
  • {{.PID}}:pid,使用pid表示这个组只会有这一个进程
  • {{.StartTime}}:进程的起始时间
  • {{.Cgroups}}:进程的cgoup,可以用于区分不同的容器

进行分组进程过滤除了使用cmdline字段,还可以使用comm和exe,分别表示进程名和二进制路径,并且遵循以下规则:

如果使用了多个字段,则必须都匹配,例如,如果既使用了comm,又使用了exe,两个过滤必须都满足

对于comm和exe,它们是字符串数组,并且是OR的关系。

对于cmdline,则是正则表达式数组,并且是AND的关系。

例如:

process_names:
  # 进程名过滤,超过15个字符会被截断
  - comm:
    - bash

  # argv[0],如果开头不是/,说明匹配进程名
  # 如果开头是/,则需要使用二进制路径全匹配
  - exe:
    - postgres
    - /usr/local/bin/prometheus

  # 如果使用多个字段进行匹配,则需要都匹配
  - name: "{{.ExeFull}}:{{.Matches.Cfgfile}}"
    exe:
    - /usr/local/bin/process-exporter
    cmdline:
    - -config.path\s+(?P<Cfgfile>\S+)
3.4.3 添加到Prometheus和exporter

在Prometheus.yaml中添加job

  - job_name: process-exporter
    honor_timestamps: true
    scrape_interval: 15s
    scrape_timeout: 10s
    #metrics_path: /metrics
    #scheme: http
    static_configs:
    - targets:
      - 10.0.1.10:9256
      - 10.0.1.20:9256

查看target,因为没在Prome node02 创建exporter

在grafana中创建dashboard ID:4202

3.4.4 监控进程指标

在实际监控进程时,主要使用的指标就是cpu和内存。

process-exporter中进程的指标以namedprocess_namegroup开头:

namedprocess_namegroup_cpu_seconds_total:cpu使用时间,通过mode区分是user还是system

namedprocess_namegroup_memory_bytes:内存占用,通过memtype区分不同的占用类型

namedprocess_namegroup_num_threads:线程数

namedprocess_namegroup_open_filedesc:打开的文件句柄数

namedprocess_namegroup_read_bytes_total:进程读取的字节数

namedprocess_namegroup_thread_context_switches_total:线程上下文切换统计

namedprocess_namegroup_thread_count:线程数量统计

namedprocess_namegroup_thread_cpu_seconds_total:线程的cpu使用时间

namedprocess_namegroup_thread_io_bytes_total:线程的io

相关推荐
许苑向上9 小时前
在Linux上部署(MySQL Redis Elasticsearch等)各类软件
linux·中间件·开源软件
网安_秋刀鱼9 小时前
中间件安全
安全·web安全·网络安全·中间件·1024程序员节
武子康11 小时前
大数据-218 Prometheus 插件 exporter 与 pushgateway 配置使用 监控服务 使用场景
大数据·hive·hadoop·flink·spark·prometheus
管理大亨18 小时前
K8S之Prometheus 部署(二十)
docker·kubernetes·prometheus
凡人的AI工具箱1 天前
15分钟学 Go 第 41 天:中间件的使用
开发语言·人工智能·后端·中间件·golang
ID_云泽2 天前
使用docker部署Prometheus和Grafana去监控mysql和redis
运维·grafana·prometheus·性能监控
卷心菜是俺3 天前
分布式数据库中间件mycat
数据库·分布式·中间件
福大大架构师每日一题3 天前
30.1 时序数据库TSDB的典型特点
prometheus
General_G3 天前
FastDDS服务发现之EDP的收发
linux·中间件·服务发现·fastdds
皮克斯的进化之路3 天前
RabbitMQ的应用
分布式·中间件·rabbitmq