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查看相关帮助信息
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
- targets:
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_
·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
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
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
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
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 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)