Prometheus03-应用监控

3.主机监控、应用监控

二进制安装node_exporter

tar -zxvf node_exporter-xxx.tar.gz -C /usr/local
cd /usr/local
chown -R prometheus:prometheus node_exporter-xxx
ln -sv node_exporter-xxx node_exporter
cd /usr/local/node_exporter

启动

./node_exporter

需要启动时添加参数--web.listen-address=":9200”即可
更多方法可以使用./node_exporter -h查看相关帮助信息

http://127.0.0.1:9100/metrics

systemctl管理node_exporter

vim /usr/lib/systemd/system/node_exporter.service
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target

[Unit]
Description=node_exporter
After=network.target

systemctl start node_exporter
systemctl status node_exporter
systemctl enable node_exporter

node_exporter与prometheus集成

vim /usr/local/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s

alerting:
alertmanagers:

  • static_configs:
    • targets:

rule_files:
...

scrape_configs:

  • job_name: 'prometheus'
    static_configs:
    • targets: ['localhost:9090']
  • job_name: 'node_export'
    static_configs:
    • targets:
      • 192.168.1.2:9100
      • 192.168.1.3:9100
      • 192.168.1.4:9100

prometheus配置文件配置项解释

默认的配置文件prometheus.yml
文件中定义了4个YAML块: global、 alerting、 rule_files和scrape_configs。

global块
在Prometheus安装后,官方会提供一个默认的prometheus.yml文件,其中包含global的默认配置内容,主要有以下四个参数:
·scrape_interval,每次数据采集的时间间隔,默认为1秒。
·scrape_timeout,采集请求超时时间,默认为10秒。
·evaluation_interval,执行rules的频率,默认为1秒。
·external_labels,与外部系统通信时添加到任意时间序列或告警用的外部标签。

alerting
用来设置Prometheus的警报规则

rule_files
用来指定包含记录规则或警报规则的文件列表

scrape_configs块
scrape_configs主要用于配置被采集数据节点操作,每一个采集配置主要有以下几个参数:
·job_name,全局唯一名称。
·scrape_interval,默认等于global内设置的参数值,设置后可以覆盖global中的值。
·scrape_timeout,默认等于global内设置的参数值。
·metrics_path,从targets获取metric的HTTP资源路径,默认是/metrics。
·honor_labels,Prometheus如何处理标签之间的冲突。若设置为"true",则通过保留标签来解决标签冲突进行数据值采集。若设置为"false",则通过重命名来解决标签冲突,以exported_格式采集数据值,例如exported_job形式,默认是"false"。
·scheme,用于请求的协议方式,默认是http。
·params,数据采集访问时HTTP URL设定的请求参数。
·relabel_configs,采集数据重置标签配置。
·metric_relabel_configs,metric重置标签配置。
·sample_limit,对每个被已知样本(sample)数量的每次采集进行限制,如果超过限制,该数据将被视为失败。默认值为0,表示无限制。”

windows主机监控

1.下载并安装 wmi_exporter-0.5.0-amd64.msi
2.与prometheus集成

  • job_name: 'wmi_exporter'
    scrape_interval: 10s
    static_configs:
    • targets: ['192.168.24.16:9182']

mysql数据库监控

1.下载并安装 mysqld_exporter-0.11.0.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.11.0.linux-amd64.tar.gz

2.创建MySQL授权用户
·连接到MySQL服务器,创建一个用户,例如“mysqld_exporter”
·该用户需要拥有PROCESS,SELECT,REPLICATION CLIENT授权
·为避免有些高负载MySQL服务器过载,为用户设置最大连接限制。

可以进行如下操作:
CREATE USER 'mysqld_exporter'@'localhost' IDENTIFIED BY 'YourStrongPassword' WITH
MAX_USER_CONNECTIONS 2; #注意MySQL5.5版本时去掉MAX_USER_CONNECTIONS选项

GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO 'mysqld_exporter'@'localhost';

FLUSH PRIVILEGES;

核查用户是否已经创建完成

select Host,User from mysql.user;

3.配置数据库认证。
mysqld_exports需要连接数据库服务器的用户名和密码,这里可以通过两种方式向exporter提供此内容。
·使用环境变量。创建一个名为“DATA_SOURCE_NAME”的环境变量,格式如下:
export DATA_SOURCE_NAME='user:password@(hostname:3306)/”

·使用配置文件。创建一个文件“.mysqld_exporter.cnf”,并在该文件中输入用户名和密码。格式如下:
user=USER_CREATED_FOR_EXPORTER # 连接MySQL时使用的用户名
password=YOUR_PASSWORD # 用户密码

在与“mysqld_exports”文件同目录下创建“.mysqld_exporter.cnf”文件,并添加如下内容:

vi .mysqld_exporter.cnf

[client]
user=mysqld_exporter
password=YourStrongPassword

4.启动mysqld_exporter。
./mysqld_exporter --config.my-cnf=".mysqld_exporter.cnf"
mysqld_exporter成功启动后,默认监听端口是9104
在输出中,“Enabled collectors”列是mysqld_exporter默认情况下启用的功能。

5.添加mysqld_exporter,为系统服务启动。
vi /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=Prometheus MySQL Exporter
After=network.target
User=root
Group=root

[Service]
Type=simple
Restart=always
ExecStart=/data/mysqld_exporter/mysqld_exporter
--conf?ig.my-cnf=/data/mysqld_exporter/.mysqld_exporter.cnf
--collect.global_status
--collect.auto_increment.columns
--collect.info_schema.processlist
--collect.binlog_size
--collect.info_schema.tablestats
--collect.global_variables
--collect.info_schema.innodb_metrics
--collect.info_schema.query_response_time
--collect.info_schema.userstats
--collect.info_schema.tables
--collect.perf_schema.tablelocks
--collect.perf_schema.f?ile_events
--collect.perf_schema.eventswaits
--collect.perf_schema.indexiowaits
--collect.perf_schema.tableiowaits
--collect.slave_status
--web.listen-address=0.0.0.0:9104

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl start mysqld_exporter.service

6.mysql_exporter与Prometheus集成

  • job_name: 'mysqld_exporter'
    scrape_interval: 10s
    static_conf?igs:
    • targets: ['192.168.24.61:9104']

redis监控

1.下载并解压缩软件包到指定的安装目录 redis_exporter。
tar -xvf redis_exporter-v0.23.0.linux-amd64.tar.gz
./redis_exporter -redis.addr localhost:6379 -redis.password YourStrongPassword

2.添加redis_exporter为系统服务开机启动配置文件redis_exporter.service:

vi /usr/lib/systemd/system/redis_exporter.service

[Unit]
Description=Prometheus Redis Exporter
After=network.target

[Service]
Type=simple
Restart=always
ExecStart=/data/redis_exporter/redis_exporter
-redis.addr localhost:6379
-redis.password YourStrongPassword \

[Install]
WantedBy=multi-user.target

Redis server若设置过密码登录,以上文件内容需要设置redis连接地址和密码。

3.与Prometheus集成

  • job_name: 'redis_exporter'
    scrape_interval: 10s
    static_configs:
    • targets: ['192.168.24.61:9121']

nginx监控

1.需要安装支持第三方的nginx virtual host traffic status模块,提供对虚拟主机状态信息的访问,它包含当前状态,如服务器、upstreams、缓存,即进行模块加载操作:
./configure --add-module=/path/to/nginx-module-vts

nginx-module-vts在Nginx官网上的第三方栏目中推荐下载页面地址https://github.com/vozlt/nginx-module-vts,也可以直接使用git进行clone操作git clone git://github.com/vozlt/nginx-module-vts.git。若没有加载nginx-module-vts模块支持,想要通过重新编译加载模块时,需要备份原来的应用环境,再加载此模块。

模块加载完成后,需要在Nginx配置文件中添加如下格式的配置内容:
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}

通过 http://127.0.0.1/status 来访问

2.下载并解压 nginx-vts-exporter

启动

./nginx-vts-exporter -nginx.scrape_uri http://localhost/status/format/json

3.添加nginx-vts-exporter为系统服务开机启动配置文件nginx-vts-exporter.service:
vi /usr/lib/systemd/system/nginx-vts-exporter.service
[Unit]
Description=Prometheus Nginx VTS Exporter
After=network.target
User=nginx
Group=nginx

[Service]
Type=simple
Restart=always
ExecStart=/data/nginx-vts-exporter/nginx-vts-exporter
-nginx.scrape_uri http://localhost/status/format/json

[Install]
WantedBy=multi-user.target

4.与Prometheus集成

  • job_name: 'nginx-vts-exporter'
    scrape_interval: 10s
    static_configs:
    • targets: ['192.168.24.14:9913']

psql监控

postgres_exporter
https://www.imooc.com/article/297421
https://github.com/prometheus-community/postgres_exporter
https://www.cnblogs.com/xuwujing/p/14065740.html
https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/readmd/prometheus-local-storage

relabel步骤
https://www.jianshu.com/p/c21d399c140a
http://www.mianshigee.com/tutorial/prometheus-book/sd-service-discovery-with-relabel.md

监控postgresql
来自github https://github.com/prometheus-community/postgres_exporter

以函数的形式创建用户后删除用户

CREATE OR REPLACE FUNCTION __tmp_create_user() returns void as

BEGIN IF NOT EXISTS ( SELECT # 可以不写* FROM pg_catalog.pg_user WHERE usename = 'postgres_exporter') THEN CREATE USER postgres_exporter; END IF; END;

language plpgsql; # 这行是固定写法

SELECT __tmp_create_user();
DROP FUNCTION __tmp_create_user();

设置密码

ALTER USER postgres_exporter WITH PASSWORD '123456';

设置postgres_exporter用户的search_path

ALTER USER postgres_exporter SET SEARCH_PATH TO postgres_exporter,pg_catalog;

设置监控用户的权限,增加或修改为其他可连接的数据库

GRANT CONNECT ON DATABASE postgres TO postgres_exporter;

仅当PG版本大于10时,运行以下语句。用于权限的划分

GRANT pg_monitor to postgres_exporter;

创建模式并赋予监控用户使用的权限

CREATE SCHEMA IF NOT EXISTS postgres_exporter;
GRANT USAGE ON SCHEMA postgres_exporter TO postgres_exporter;

CREATE OR REPLACE FUNCTION get_pg_stat_activity() RETURNS SETOF pg_stat_activity AS

SELECTFROMpgcatalog.pgstatactivity;

LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE OR REPLACE VIEW postgres_exporter.pg_stat_activity
AS SELECT * from get_pg_stat_activity();

GRANT SELECT ON postgres_exporter.pg_stat_activity TO postgres_exporter;

CREATE OR REPLACE FUNCTION get_pg_stat_replication() RETURNS SETOF pg_stat_replication AS

SELECTFROMpgcatalog.pgstatreplication;

LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE OR REPLACE VIEW postgres_exporter.pg_stat_replication
AS SELECT * FROM get_pg_stat_replication();

GRANT SELECT ON postgres_exporter.pg_stat_replication TO postgres_exporter;

CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE OR REPLACE FUNCTION get_pg_stat_statements() RETURNS SETOF pg_stat_statements AS

SELECTFROMpublic.pgstatstatements;

LANGUAGE sql
VOLATILE
SECURITY DEFINER;

CREATE OR REPLACE VIEW postgres_exporter.pg_stat_statements
AS
SELECT * FROM get_pg_stat_statements();

GRANT SELECT ON postgres_exporter.pg_stat_statements TO postgres_exporter;

请记住在连接字符串中使用postgres数据库名称:
DATA_SOURCE_NAME=postgresql://postgres_exporter:password@localhost:5432/postgres?sslmode=disable

删除用户与权限

select * from information_schema.schemata; 列出所有schema(模式)
drop schema postgres_exporter; 删除schema

revoke all on database postgres from postgres_exporter; 删除用户在相应数据库上权限
select * from pg_catalog.pg_user; 列出所有用户
drop role postgres_exporter; 删除用户,前提是删除其所有权限

\df 列出所有函数
\df+
drop function postgres_exporter.f_select_pg_stat_activity(); 删除function,注意区分schema

posted @   立勋  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示