prometheus
什么是普罗米修斯?
Prometheus是一个开源系统监控和警报工具包,最初是在[SoundCloud]上构建的。自2012年成立以来,许多公司和组织都采用了Prometheus,并且该项目拥有非常活跃的开发人员和用户[社区]。它现在是一个独立的开源项目,独立于任何公司维护。为了强调这一点,并澄清项目的治理结构,Prometheus于2016年加入[云原生计算基金会],成为继Kubernetes之后的第二个托管项目。
Prometheus 收集并将其指标存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。
特点:
普罗米修斯的主要特点是:
- 一个多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据
- PromQL,一种灵活的查询语言,用于利用这种维度
- 不依赖分布式存储;单个服务器节点是自治的
- 时序收集通过 HTTP 上的拉取模型进行
- 通过中间网关支持推送时间序列
- 通过服务发现或静态配置发现目标
- 支持多种模式的图形和仪表板
什么是指标?
用外行人的话来说,指标是数字度量,时间序列意味着随时间变化而记录。用户想要衡量的内容因应用程序而异。对于Web服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。
指标在理解应用程序以某种方式工作的原因方面起着重要作用。假设您正在运行一个 Web 应用程序,并发现该应用程序运行缓慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数很高时,应用程序可能会变慢。如果您有请求计数指标,则可以发现原因并增加服务器数量以处理负载。
组件
Prometheus生态系统由多个组件组成,其中许多是可选的:
- 主普罗米修斯服务器,用于抓取和存储时间序列数据
- 用于检测应用程序代码的客户端库
- 用于支持短期作业的推送网关
- HAProxy,StatsD,Graphite等服务的特殊用途出口商。
- 用于处理警报的警报管理器
- 各种支持工具
大多数普罗米修斯组件都是用Go编写的,这使得它们很容易被构建和部署为静态二进制文件。
建筑
下图说明了普罗米修斯的架构及其一些生态系统组件:
Prometheus 直接从检测作业中抓取指标,或者通过中间推送网关为短期作业抓取指标。它将所有抓取的样本存储在本地,并对此数据运行规则,以聚合和记录现有数据中的新时间序列或生成警报。Grafana或其他API使用者可用于可视化收集的数据。
什么时候适合?
普罗米修斯非常适合记录任何纯数字时间序列。它既适合以机器为中心的监视,也适用于对高度动态的面向服务的体系结构的监视。在微服务世界中,它对多维数据收集和查询的支持是一个特别的优势。
Prometheus 旨在提高可靠性,成为您在中断期间访问的系统,以便您快速诊断问题。每个 Prometheus 服务器都是独立的,不依赖于网络存储或其他远程服务。当基础结构的其他部分损坏时,您可以依赖它,并且不需要设置广泛的基础结构即可使用它。
什么时候不合适?
普罗米修斯重视可靠性。您始终可以查看有关系统的哪些统计信息可用,即使在故障情况下也是如此。如果您需要100%的准确性,例如对于每个请求的计费,Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整。在这种情况下,您最好使用其他系统来收集和分析用于计费的数据,并使用Prometheus进行其余的监视。
环境说明:
主机 | 系统 | IP | 服务 |
---|---|---|---|
master | Centos 8 | 192.168.220.9 | Prometheus |
node1 | Centos 8 | 192.168.220.10 | node_exporter |
visual | Centos 8 | 192.168.220.17 | grafana |
安装 prometheus
官网: link.
下载
https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gz
上传到目录
[root@node1 ~]# cd /usr/src
[root@node1 src]# ls
debug kernels prometheus-2.31.1.linux-amd64.tar.gz
解压并重命名
[root@node1 src]# tar xf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/
[root@master src]# tar xf prometheus-2.31.1.linux-amd64.tar.gz -C /usr/local/
[root@master src]# cd /usr/local/
[root@master local]# ls
bin etc games include lib lib64 libexec prometheus-2.31.1.linux-amd64 sbin share src
[root@master local]# mv prometheus-2.31.1.linux-amd64 prometheus
[root@master local]# ls
bin etc games include lib lib64 libexec prometheus sbin share src
配置文件检查
[root@master local]# cd prometheus/
[root@master prometheus]# ./promtool check config ./prometheus.yml
Checking ./prometheus.yml
SUCCESS: 0 rule files found
[root@master prometheus]#
配置文件
配置共分为三部分,分别是全局配置、告警配置、收集数据配置
[root@master prometheus]# vim prometheus.yml
# 全局配置
# my global config
global:
scrape_interval: 15s # 每隔15秒向目标抓取一次数,默认为一分钟
evaluation_interval: 15s # 每隔15秒执行一次告警规则,默认为一分钟
# scrape_timeout: 30s #抓取数据的超时时间,默认为10s
# 告警配置
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093 # alertmanager所部署机器的ip和端口
# 定义告警规则和阈值的yml文件
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# 收集数据的配置
# 下面是Prometheus自身的一个配置
scrape_configs:
# 这个配置表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs: # 静态配置
- targets: ["localhost:9090"] # 本机的9090端口
配置开机自启服务
[root@master prometheus]# cat > /usr/lib/systemd/system/prometheus.service <<EOF
[Unit]
Description=The Prometheus Server
After=network.target
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml
RestartSec=15s
[Install]
WantedBy=multi-user.target
EOF
[root@master prometheus]# systemctl daemon-reload
[root@master prometheus]# systemctl status prometheus
● prometheus.service - The Prometheus Server
Loaded: loaded (/usr/lib/systemd/system/prometheus.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@master prometheus]# systemctl enable --now prometheus
Created symlink /etc/systemd/system/multi-user.target.wants/prometheus.service → /usr/lib/systemd/system/prometheus.service.
[root@master prometheus]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:9090 *:*
启动的参数:
# 启动参数介绍
--config.file # 加载prometheus的配置文件
--web.listen-address # 监听prometheus的web地址和端口
--web.enable-lifecycle # 热启动参数,可以在不中断服务的情况下重启加载配置文件
--storage.tsdb.retention #数据持久化的时间
--storage.tsdb.path #数据持久化的保存路径
普罗米修斯应该启动了。应该能够浏览到有关其自身的状态页面为 localhost:9090 。给它大约 30 秒的时间,从其自己的 HTTP 指标终结点收集有关自身的数据。
访问网页
简单查看一下,Prometheus 导出的关于自身的一个指标被称为 (Prometheus 服务器所服务的请求总数)。
NodeExporter
下载网址也在Prometheus官网
Node Exporter 是 Prometheus 提供的一个可以采集到主机信息的应用程序,它能采集到机器的 CPU、内存、磁盘等信息。
下载
https://github.com/prometheus/node_exporter/releases/download/v1.3.0/node_exporter-1.3.0.linux-amd64.tar.gz
解压名重命名
[root@node1 ~]# cd /usr/src
[root@node1 src]# ls
debug kernels node_exporter-1.3.0.linux-amd64.tar.gz
[root@node1 src]# tar xf node_exporter-1.3.0.linux-amd64.tar.gz -C /usr/local/
[root@node1 src]# cd /usr/local/
[root@node1 local]# ls
bin etc games include lib lib64 libexec node_exporter-1.3.0.linux-amd64 sbin share src
[root@node1 local]# mv node_exporter-1.3.0.linux-amd64 node_exporter
[root@node1 local]# ls
bin etc games include lib lib64 libexec node_exporter sbin share src
启动参数
# 相关启动的参数
--web.listen-address # node_expoetrt暴露的端口
--collector.systemd # 从systemd中收集
--collector.systemd.unit-whitelist # 白名单,收集目标
".+" # 从systemd中循环正则匹配单元
"(docker|sshd|nginx).service" # 白名单,收集目标,收集参数node_systemd_unit_state
service文件配置
[root@node1 local]# cat /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=The node_exporter Server
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
RestartSec=15s
SyslogIdentifier=node_exporter
[Install]
WantedBy=multi-user.target
[root@node1 local]# systemctl daemon-reload
[root@node1 local]# systemctl status node_exporter
● node_exporter.service
Loaded: loaded (/usr/lib/systemd/system/node_exporter.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@node1 local]# systemctl enable --now node_exporter
Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /usr/lib/systemd/system/node_exporter.service.
[root@node1 local]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:9100 *:*
LISTEN 0 128 [::]:22 [::]:*
访问 Prometheus 是否正在提供有关其自身的指标 localhost:9100
修改master主机的配置文件并重启
1 # my global config
2 global:
3 scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
4 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
5 # scrape_timeout is set to the global default (10s).
6
7 # Alertmanager configuration
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 # - alertmanager:9093
13
14 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
15 rule_files:
16 # - "first_rules.yml"
17 # - "second_rules.yml"
18
19 # A scrape configuration containing exactly one endpoint to scrape:
20 # Here it's Prometheus itself.
21 scrape_configs:
22 # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
23 - job_name: "prometheus"
24
25 # metrics_path defaults to '/metrics'
26 # scheme defaults to 'http'.
27
28 static_configs:
29 - targets: ["192.168.220.10:9100"] # 修改为安装node_exporter主机的IP+端口
# 重启
[root@master prometheus]# systemctl restart prometheus
[root@master prometheus]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:9090 *:*
访问master的9090/targets,查看到node1(192.168.220.10)任务的状态是Up,证明Node_Exporter是正常的;Prometheus 服务端会定时去拉取node_exporter的数据。
Grafana
官网: link.
grafana是一款采用 go 语言编写的开源应用,主要用于大规模指标数据的可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库。
下载安装
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-8.2.5-1.x86_64.rpm
[root@visual ~]# cd /usr/src/
[root@visual src]# ls
debug grafana-enterprise-8.2.5-1.x86_64.rpm kernels
[root@visual src]# yum -y install grafana-enterprise-8.2.5-1.x86_64.rpm
....
启动
[root@visual src]# cd /etc/grafana/
[root@visual grafana]# ls
grafana.ini ldap.toml provisioning
[root@visual grafana]# cd
[root@visual ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@visual ~]# systemctl enable --now grafana-server
[root@visual ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:3000 *:*
访问
默认用户和密码是admin,登录后会要求修改密码
修改密码
登录成功界面
选择数据源为Prometheus
填写好后滚动到最后面保存
导入模板
Grafana模板下载: link.
官网下载好看的模板导入,我这里使用的模板id是8919
选择prometheus导入