prometheus 单机部署(二)

552 阅读3分钟

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监控信息) image.png 也可以通过prometheus 的语法对数据进行处理。 示例2: 服务请求状态码汇总。 sum(rate(prometheus_http_requests_total[2m])) by (code)

image.png

可以点击graph切换视图模式。

image.png

监控采集接入

配置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(后面文章也会讲到)。