Nginx Exporter 接入


Nginx 通过 stub_status 页面暴露了部分监控指标。Nginx Prometheus Exporter 会采集单个 Nginx 实例指标,并将其转化为 Prometheus 可用的监控数据, 最终通过 HTTP 协议暴露给 Prometheus 服务进行采集。我们可以通过 Exporter 上报重点关注的监控指标,用于异常报警和大盘展示。

操作步骤

使用 Docker 容器运行 Exporter

方式1:使用 nginx-prometheus-exporter 通过 Docker 容器快速部署 Exporter。执行 Docker 命令如下:

$ docker run -p 9113:9113 nginx/nginx-prometheus-exporter:0.8.0 -nginx.scrape-uri http://<nginx>:8080/stub_status

方式2:使用 nginx-prometheus-exporter 镜像将服务部署在腾讯云 容器服务 TKE 中,通过托管 Prometheus 的监控自发现 CRD PodMonitor 或者 ServiceMonitor 来采集监控数据。

使用二进制程序运行 Exporter

下载安装

  1. 根据实际运行环境在社区中下载相应的 Nginx Prometheus Exporter
  2. 安装 Nginx Prometheus Exporter。

开启 NGINX stub_status 功能

  1. 开源 Nginx 提供一个简单页面用于展示状态数据,该页面由 tub_status 模块提供。执行以下命令检查 Nginx 是否已经开启了该模块:
    nginx -V 2>&1 | grep -o with-http_stub_status_module
    
    • 如果在终端中输出 with-http_stub_status_module ,则说明 Nginx 已启用 tub_status 模块。
    • 如果未输出任何结果,则可以使用 --with-http_stub_status_module 参数从源码重新配置编译一个 Nginx。示例如下:
      ./configure \\
      --with-http_stub_status_module
      make
      sudo make install
      
  2. 确认 stub_status 模块启用之后,修改 Nginx 的配置文件指定 status 页面的 URL。示例如下:
    server { location /nginx_status { stub_status access_log off allow 127.0.0.1
            deny all
        }
    }
    
  3. 检查并重新加载 nginx 的配置使其生效。
    nginx -t
    nginx -s reload
    
  4. 完成上述步之后,可以通过配置的 URL 查看 Nginx 的指标:
    Active connections: 45
    server accepts handled requests
    1056958 1156958 4491319
    Reading: 0 Writing: 25 Waiting : 7
    

运行 NGINX Prometheus Exporter

执行以下命令启动 NGINX Prometheus Exporter:

$ nginx-prometheus-exporter -nginx.scrape-uri http://<nginx>:8080/nginx_status

上报指标

  • nginxexporter_build_info -- exporter 编译信息。
  • 所有的 stub_status 指标。
  • nginx_up -- 展示上次抓取的状态:1表示抓取成功, 0表示抓取失败。

配置 Prometheus 的抓取 Job

  1. Nginx Prometheus Exporter 正常运行后,执行以下命令,将 Job 添加到 Prometheus 的抓取任务中。
    ... - job_name: 'nginx_exporter' static_configs: - targets: ['your_exporter:port']                    
    
  2. 通常情况下 ,Exporter 和 Nginx 并非共同运行,所以数据上报的 instance 并不能真实描述是哪个实例,为了方便数据的检索和观察,我们可以修改 instance 标签,使用真实的 IP 进行替换以便更加直观。示例如下:
    ... - job_name: 'nginx_exporter' static_configs: - targets: ['your_exporter:port'] relabel_configs: - source_labels: [__address__] regex: '.*' target_label: instance replacement: '10.0.0.1:80'
    

启用数据库监控大盘

Prometheus 监控服务在 Grafana 中提供预先配置的 Nginx Exporter Dashboard,您可以根据以下操作步骤查看 Nginx 监控数据。

  1. 登录 Prometheus 监控服务控制台
  2. 单击对应实例 ID 右侧的,即可查看数据。
    Nginx Exporter dashboard

Page 2

在使用数据库 Redis 过程中需要对 Redis 运行状态进行监控,以便了解 Redis 服务是否运行正常,排查 Redis 故障等。Prometheus 监控服务提供基于 Exporter 的方式来监控 Redis 运行状态,并提供了开箱即用的 Grafana 监控大盘。本文为您介绍如何使用 Prometheus 监控 Redis。

说明:

为了方便安装管理 Exporter,推荐使用腾讯云 容器服务 进行统一管理。

前提条件

操作步骤

Exporter 部署

使用 Secret 管理 Redis 密码

  1. 在左侧菜单中选择工作负载 > Deployment,进入 Deployment 页面。
  2. 在页面右上角单击 YAML 创建资源,创建 YAML 配置,配置说明如下:
    使用 Kubernetes 的 Secret 来管理密码并对密码进行加密处理,在启动 Redis Exporter 的时候直接使用 Secret Key,需要调整对应的 password,YAML 配置示例如下:
    apiVersion: v1
    kind: Secret
    metadata:
    name: redis-secret-test
    namespace: redis-test
    type: Opaque
    stringData:
    password: you-guess

部署 Redis Exporter

在 Deployment 管理页面,单击新建,选择对应的命名空间来进行部署服务。可以通过控制台的方式创建,如下以 YAML 的方式部署 Exporter,YAML 配置示例如下:

说明:

更多 Exporter 详细参数介绍请参见 redis_exporter

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: redis-exporter name: redis-exporter namespace: redis-test
spec:
replicas: 1
selector:
matchLabels:
k8s-app: redis-exporter template:
metadata:
labels:
k8s-app: redis-exporter spec:
containers:
- env:
- name: REDIS_ADDR
value: ip:port - name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
name: redis-secret-test
key: password
image: ccr.ccs.tencentyun.com/rig-agent/redis-exporter:v1.32.0
imagePullPolicy: IfNotPresent
name: redis-exporter
ports:
- containerPort: 9121
name: metric-port securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30

验证

  1. 在 Deployment 页面单击上述步骤创建的 Deployment,进入 Deployment 管理页面。
  2. 单击日志页签,可以查看到 Exporter 成功启动并暴露对应的访问地址,如下图所示:
  3. 单击 Pod 管理页签,进入 Pod 页面。
  4. 在右侧的操作项下单击远程登录登录 Pod,在命令行窗口中执行以下 curl 命令对应 Exporter 暴露的地址,可以正常得到对应的 Redis 指标。如发现未能得到对应的数据,请检查一下 REDIS_ADDRREDIS_PASSWORD 是否正确。示例如下:
    curl localhost:9121/metrics
    命令执行结果如下图所示:

添加采取任务

  1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。
  2. 通过集成容器服务列表单击集群 ID 进入到容器服务集成管理页面。
  3. 通过服务发现添加 Pod Monitor 来定义 Prometheus 抓取任务,YAML 配置示例如下:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: redis-exporter namespace: cm-prometheus spec:
podMetricsEndpoints:
- interval: 30s
port: metric-port path: /metrics relabelings:
- action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: instance
replacement: 'crs-xxxxxx' - action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: ip
replacement: '1.x.x.x' namespaceSelector: matchNames:
- redis-test
selector: matchLabels:
k8s-app: redis-exporter

说明:

由于 ExporterRedis 部署在不同的服务器上,因此建议通过 Prometheus Relabel 机制将 Redis 实例的信息放到监控指标中,以方便定位问题。

查看监控

  1. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。
  2. 单击集成中心,进入集成中心页面。找到 Redis 监控,安装对应的 Grafana Dashboard 即可开启 Redis 监控大盘,查看实例相关的监控数据,如下图所示:

告警以及接入


Page 3

MySQL Exporter 是社区专门为采集 MySQL/MariaDB 数据库监控指标而设计开发,通过 Exporter 上报核心的数据库指标,用于异常报警和监控大盘展示,云监控 Prometheus 提供了与 MySQL Exporter 集成及开箱即用的 Grafana 监控大盘。

目前,Exporter 支持高于5.6版本的 MySQL 和高于10.1版本的 MariaDB。在 MySQL/MariaDB 低于5.6版本时,部分监控指标可能无法被采集。

说明:

为了方便安装管理 Exporter,推荐使用腾讯云 容器服务 来统一管理。

前提条件

操作步骤

数据库授权

因为 MySQL Exporter 是通过查询数据库中状态数据来对其进行监控,所以需要为对应的数据库实例进行授权。帐号和密码需根据实际情况而定,授权步骤如下:

  1. 登录 云数据库 MySQL 控制台。
  2. 在实例列表页面单击需要授权的数据库名称,进入数据库详情页。
  3. 选择数据库管理 > 帐号管理,进入帐号管理页面,根据业务实际需要创建监控建立的账号。
  4. 单击帐号右侧操作项下的修改权限,修改对应权限。示例如下图所示:
    您可以通过执行以下命令进行授权:
    CREATE USER 'exporter'@'ip' IDENTIFIED BY 'XXXXXXXX' WITH MAX_USER_CONNECTIONS 3;
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'ip';

    说明:

    建议为该用户设置最大连接数限制,以避免因监控数据抓取对数据库带来影响。但并非所有的数据库版本中都可以生效,例如 MariaDB 10.1 版本不支持最大连接数设置,则无法生效。详情请参见 MariaDB 说明

Exporter 部署

使用 Secret 管理 MySQL 连接串

  1. 在左侧菜单中选择工作负载 > Deployment,进入 Deployment 页面。
  2. 在页面右上角单击 YAML 创建资源,创建 YAML 配置,配置说明如下:
    使用 Kubernetes 的 Secret 来管理连接串,并对连接串进行加密处理,在启动 MySQL Exporter 的时候直接使用 Secret Key,需要调整对应的连接串,YAML 配置示例如下:
apiVersion: v1
kind: Secret
metadata:
name: mysql-secret-test
namespace: mysql-demo
type: Opaque
stringData:
datasource: "user:password@tcp(ip:port)/"

部署 MySQL Exporter

在 Deployment 管理页面,选择对应的命名空间来进行部署服务,可以通过控制台的方式创建。如下以 YAML 的方式部署 Exporter, 配置示例如下:

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
k8s-app: mysql-exporter name: mysql-exporter namespace: mysql-demo
spec:
replicas: 1
selector:
matchLabels:
k8s-app: mysql-exporter template:
metadata:
labels:
k8s-app: mysql-exporter spec:
containers:
- env:
- name: DATA_SOURCE_NAME
valueFrom:
secretKeyRef:
name: mysql-secret-test
key: datasource
image: ccr.ccs.tencentyun.com/rig-agent/mysqld-exporter:v0.12.1
imagePullPolicy: IfNotPresent
name: mysql-exporter
ports:
- containerPort: 9104
name: metric-port
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30

验证

  1. 在 Deployment 页面单击上述步骤创建的 Deployment,进入 Deployment 管理页面。
  2. 单击日志页签,可以查看到 Exporter 成功启动并暴露对应的访问地址,如下图所示:
  3. 单击 Pod 管理页签进入 Pod 页面。
  4. 在右侧的操作项下单击远程登录登录 Pod,在命令行窗口中执行以下 curl 命令对应 Exporter 暴露的地址,可以正常得到对应的 MySQL 指标。如发现未能得到对应的数据,请检查连接串是否正确,具体如下:
curl localhost:9104/metrics

执行结果如下图所示:

添加采取任务

  1. 登录 云监控 Prometheus 控制台,选择对应 Prometheus 实例进入管理页面。
  2. 通过集成容器服务列表单击集群 ID 进入到容器服务集成管理页面。
  3. 通过服务发现添加 Pod Monitor 来定义 Prometheus 抓取任务,YAML 配置示例如下:
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: mysql-exporter namespace: cm-prometheus spec:
podMetricsEndpoints:
- interval: 30s
port: metric-port path: /metrics relabelings:
- action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: instance
replacement: 'crs-xxxxxx' - action: replace
sourceLabels:
- instance
regex: (.*)
targetLabel: ip
replacement: '1.x.x.x' namespaceSelector: matchNames:
- mysql-demo
selector: matchLabels:
k8s-app: mysql-exporter

查看监控

  1. 登录 云监控 Prometheus 控制台,选择对应 Prometheus 实例进入管理页面。
  2. 单击集成中心,进入集成中心页面。找到 MySQL 监控,安装对应的 Grafana Dashboard 即可开启 MySQL 监控大盘,查看实例相关的监控数据,如下图所示:

告警以及接入

腾讯云 Prometheus 托管服务内置了部分 MySQL 数据库的报警策略模板,可根据业务实际的情况调整对应的阈值来添加告警策略。详情请参见 新建告警策略
MySQL Exporter alert

MySQL Exporter 采集参数说明

MySQL Exporter 使用各种 Collector 来控制采集数据的启停,具体参数如下:

名称 MySQL 版本 描述
collect.auto_increment.columns 5.1 在 information_schema 中采集 auto_increment 和最大值。
collect.binlog_size 5.1 采集所有注册的 binlog 文件大小。
collect.engine_innodb_status 5.1 从 SHOW ENGINE INNODB STATUS 中采集状态数据。
collect.engine_tokudb_status 5.6 从 SHOW ENGINE TOKUDB STATUS 中采集状态数据。
collect.global_status 5.1 从 SHOW GLOBAL STATUS(默认开启)中采集状态数据。
collect.global_variables 5.1 从 SHOW GLOBAL VARIABLES(默认开启)中采集状态数据。
collect.info_schema.clientstats 5.5 如果设置了 userstat=1,设置成 true 来开启用户端数据采集。
collect.info_schema.innodb_metrics 5.6 从 information_schema.innodb_metrics 中采集监控数据。
collect.info_schema.innodb_tablespaces 5.7 从 information_schema.innodb_sys_tablespaces 中采集监控数据。
collect.info_schema.innodb_cmp 5.5 从 information_schema.innodb_cmp 中采集 InnoDB 压缩表的监控数据。
collect.info_schema.innodb_cmpmem 5.5 从 information_schema.innodb_cmpmem 中采集 InnoDB buffer pool compression 的监控数据。
collect.info_schema.processlist 5.1 从 information_schema.processlist 中采集线程状态计数的监控数据。
collect.info_schema.processlist.min_time 5.1 线程可以被统计所维持的状态的最小时间。(默认:0)
collect.info_schema.query_response_time 5.5 如果 query_response_time_stats 被设置成 ON,采集查询相应时间的分布。
collect.info_schema.replica_host 5.6 从 information_schema.replica_host_status 中采集状态数据。
collect.info_schema.tables 5.1 从 information_schema.tables 中采集状态数据。
collect.info_schema.tables.databases 5.1 设置需要采集表状态的数据库, 或者设置成 '*' 来采集所有的。
collect.info_schema.tablestats 5.1 如果设置了 userstat=1,设置成 true 来采集表统计数据。
collect.info_schema.schemastats 5.1 如果设置了 userstat=1,设置成 true 来采集 schema 统计数据。
collect.info_schema.userstats 5.1 如果设置了 userstat=1,设置成 true 来采集用户统计数据。
collect.perf_schema.eventsstatements 5.6 从 performance_schema.events_statements_summary_by_digest 中采集监控数据。
collect.perf_schema.eventsstatements.digest_text_limit 5.6 设置正常文本语句的最大长度。 (默认:120)
collect.perf_schema.eventsstatements.limit 5.6 事件语句的限制数量。(默认:250)
collect.perf_schema.eventsstatements.timelimit 5.6 限制事件语句 'last_seen' 可以保持多久, 单位为秒。 (默认:86400)
collect.perf_schema.eventsstatementssum 5.7 从 performance_schema.events_statements_summary_by_digest summed 中采集监控数据。
collect.perf_schema.eventswaits 5.5 从 performance_schema.events_waits_summary_global_by_event_name 中采集监控数据。
collect.perf_schema.file_events 5.6 从 performance_schema.file_summary_by_event_name 中采集监控数据。
collect.perf_schema.file_instances 5.5 从 performance_schema.file_summary_by_instance 中采集监控数据。
collect.perf_schema.indexiowaits 5.6 从 performance_schema.table_io_waits_summary_by_index_usage 中采集监控数据。
collect.perf_schema.tableiowaits 5.6 从 performance_schema.table_io_waits_summary_by_table 中采集监控数据。
collect.perf_schema.tablelocks 5.6 从 performance_schema.table_lock_waits_summary_by_table 中采集监控数据。
collect.perf_schema.replication_group_members 5.7 从 performance_schema.replication_group_members 中采集监控数据。
collect.perf_schema.replication_group_member_stats 5.7 从 from performance_schema.replication_group_member_stats 中采集监控数据。
collect.perf_schema.replication_applier_status_by_worker 5.7 从 performance_schema.replication_applier_status_by_worker 中采集监控数据。
collect.slave_status 5.1 从 SHOW SLAVE STATUS(默认开启)中采集监控数据。
collect.slave_hosts 5.1 从 SHOW SLAVE HOSTS 中采集监控数据。
collect.heartbeat 5.1 heartbeat 中采集监控数据。
collect.heartbeat.database 5.1 数据库心跳检测的数据源。默认:heartbeat)
collect.heartbeat.table 5.1 表心跳检测的数据源。(默认:heartbeat)
collect.heartbeat.utc 5.1 对当前的数据库服务器使用 UTC 时间戳 (pt-heartbeat is called with --utc)。(默认:false)

全局配置参数

名称 描述
config.my-cnf 用来读取数据库认证信息的配置文件 .my.cnf 位置。 (默认:~/.my.cnf)
log.level 日志级别。(默认:info)
exporter.lock_wait_timeout 为链接设置 lock_wait_timeout(单位:秒)以避免对元数据的锁时间太长。(默认:2)
exporter.log_slow_filter 添加 log_slow_filter 以避免抓取的慢查询被记录。 提示:不支持 Oracle MySQL。
web.listen-address web 端口监听地址。
web.telemetry-path metrics 接口路径。
version 打印版本信息。

heartbeat 心跳检测

如果开启 collect.heartbeat, mysqld_exporter 会通过心跳检测机制抓取复制延迟数据。


Page 4

最近更新时间:2021-09-17 14:50:16

在使用 Consul 过程中需要对 Consul 运行状态进行监控,以便了解 Consul 服务是否运行正常,排查 Consul 故障等。 Prometheus 监控服务提供基于 Exporter 的方式来监控 Consul 运行状态,并提供了开箱即用的 Grafana 监控大盘。本文为您介绍如何使用 Prometheus 监控服务 Consul。

操作步骤

  1. 登录 Prometheus 控制台
  2. 在实例列表中,选择对应的 Prometheus 实例。
  3. 进入实例详情页,单击集成中心
  4. 在集成中心选择 Consul 单击安装进行集成。

配置说明

名称 描述
名称 每个集成需要一个唯一名称
地址 要采集的 Consul 实例的地址和端口
标签 增加具有业务含义的标签,会自动添加到 Prometheus 的 Label 中

查看监控

可以通过监控大盘清晰看到如下监控状态:

  1. Consul 集群节点状态
  2. Consul 上注册服务的状态



adouk 2023年1月10日 15:23 收藏文档