prometheus 架构图我们在上一篇文章中有展示,它包括很多其他的插件,为了更快的了解的方式就是去使用它, 该篇通过部署单机模式的promehtues来简单了解prometheus的使用场景和特性。
单机部署
服务部署可以采用二进制文件或者使用docker方式部署,这里我们使用二进制方式部署, docker方式部署对学习promethues并没有什么益处,想了解docker方式部署的参考官网。 二进制包下载地址:github.com/prometheus/…
mkdir /opt/app/prometheus
cd /opt/app/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
tar xf prometheus-2.30.3.linux-amd64.tar.gz
# 启动服务
./prometheus
为了方便管理服务,可以通过systemd 对服务进行托管,
$ systemctl cat prometheus
# /usr/lib/systemd/system/prometheus.service
[Unit]
Description=Prometheus server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
[Service]
Type=simple
EnvironmentFile=-/opt/app/prometheus/env
ExecStart=/opt/app/prometheus/prometheus --config.file=/opt/app/prometheus/prometheus.yml $PROMETHEUS_OPTION
ExecReload=/usr/bin/curl -X POST http://127.0.0.1:9090/-/reload
ExecStop=/bin/kill -s SIGTERM $MAINPID
[Install]
WantedBy=multi-user.target
$ cat /opt/app/prometheus/env
PROMETHEUS_OPTION="--web.enable-lifecycle \
--web.enable-admin-api \
--storage.tsdb.retention.time=15d \
--storage.tsdb.retention.size=500MB \
--rules.alert.resend-delay=1m \
--alertmanager.timeout=10s \
--query.max-samples=50000000 \
--log.level=info \
--log.format=logfmt \
--web.external-url=http://prometheus.google.cn:9093/ \
--storage.tsdb.path="data/""
配置包括了使用env文件来统一加载prometheus的启动参数,包括:
- --web.enable-lifecycle: 通过HTTP请求启用关闭和重新加载。
- --web.enable-admin-api: 为管理控制操作启用API端点。
- --storage.tsdb.retention.time: 数据保留时间
- --storage.tsdb.retention.size: 每个数据块大小
- --rules.alert.resend-delay: 在重新发送警报到Alertmanager之前等待的最小时间。
- --alertmanager.timeout: 发送报警超时时间
- --query.max-samples: 单个查询可以加载到内存的最大样本数
- --log.level: 日志级别
- --log.format: 日志隔离
- --web.external-url: 对外保留url地址
- --storage.tsdb.path: 数据保存目录
prometheus 的默认端口为9090,默认配置文件prometheus.yml采集了本集群的监控数据。
使用尝鲜
示例1:
通过web查询监控指标:prometheus_http_requests_total (服务http监控信息)
也可以通过prometheus 的语法对数据进行处理。
示例2:
服务请求状态码汇总。
sum(rate(prometheus_http_requests_total[2m])) by (code)
可以点击graph切换视图模式。
监控采集接入
配置prometheus的配置文件,对监控数据进行采集。采集的前提是需要服务暴露监控指标,一方面通过服务暴露prometheus格式的http接口进行服务指标的暴露, 另一方面可以通过官方提供的exporter进行指标暴露。 这里我们通过最常用的node_exporter(暴露主机监控指标)进行演示和配置。
node_exporter启动后会暴露9100端口,/metrics地址下暴露服务的监控指标。node_exporter 这里不过多演示,在生产环境下需要注意的点是如何批量管理node_exporter(一般通过ansible等工具进行批量的推送,使用systemctl管理服务启停)。
以下为prometheus的配置文件, 该配置文件主要定义了监控服务的采集频率、报警规则评估频率、报警组件地址、配置加载以及采集配置。
默认配置采集配置使用静态文件来管理采集指标的地址。我们增加对node-exporter的指标采集。
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
metrics_path: '/metrics' # 采集路径
scheme: 'http' # 采集协议
static_configs:
- targets:
- 'localhost:9100' # 采集node-exporter 地址
至此promethues的单机部署和服务的接入就已经完成了,现在你可以对照官网对服务的配置和promethues查询语句进行熟悉,学会这些你就可以更灵活的使用proemtheus(后面文章也会讲到)。