prometheus(普罗米修斯)

prometheus

什么是普罗米修斯?

​ Prometheus是一个开源系统监控和警报工具包,最初是在[SoundCloud]上构建的。自2012年成立以来,许多公司和组织都采用了Prometheus,并且该项目拥有非常活跃的开发人员和用户[社区]。它现在是一个独立的开源项目,独立于任何公司维护。为了强调这一点,并澄清项目的治理结构,Prometheus于2016年加入[云原生计算基金会],成为继Kubernetes之后的第二个托管项目。

Prometheus 收集并将其指标存储为时间序列数据,即指标信息与记录它的时间戳一起存储,以及称为标签的可选键值对。

特点:

普罗米修斯的主要特点是:

  • 一个多维数据模型,其中包含由指标名称和键/值对标识的时间序列数据
  • PromQL,一种灵活的查询语言,用于利用这种维度
  • 不依赖分布式存储;单个服务器节点是自治的
  • 时序收集通过 HTTP 上的拉取模型进行
  • 通过中间网关支持推送时间序列
  • 通过服务发现或静态配置发现目标
  • 支持多种模式的图形和仪表板
什么是指标?

用外行人的话来说,指标是数字度量,时间序列意味着随时间变化而记录。用户想要衡量的内容因应用程序而异。对于Web服务器,它可能是请求时间,对于数据库,它可能是活动连接数或活动查询数等。

指标在理解应用程序以某种方式工作的原因方面起着重要作用。假设您正在运行一个 Web 应用程序,并发现该应用程序运行缓慢。您将需要一些信息来了解您的应用程序发生了什么。例如,当请求数很高时,应用程序可能会变慢。如果您有请求计数指标,则可以发现原因并增加服务器数量以处理负载。

组件

Prometheus生态系统由多个组件组成,其中许多是可选的:

  • 主普罗米修斯服务器,用于抓取和存储时间序列数据
  • 用于检测应用程序代码的客户端库
  • 用于支持短期作业的推送网关
  • HAProxy,StatsD,Graphite等服务的特殊用途出口商。
  • 用于处理警报的警报管理器
  • 各种支持工具

大多数普罗米修斯组件都是用Go编写的,这使得它们很容易被构建和部署为静态二进制文件。

建筑

下图说明了普罗米修斯的架构及其一些生态系统组件:

prometheus(普罗米修斯)_第1张图片

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 <

启动的参数:

# 启动参数介绍
--config.file      	   # 加载prometheus的配置文件
--web.listen-address   # 监听prometheus的web地址和端口
--web.enable-lifecycle # 热启动参数,可以在不中断服务的情况下重启加载配置文件
--storage.tsdb.retention   #数据持久化的时间                         
--storage.tsdb.path        #数据持久化的保存路径

普罗米修斯应该启动了。应该能够浏览到有关其自身的状态页面为 localhost:9090 。给它大约 30 秒的时间,从其自己的 HTTP 指标终结点收集有关自身的数据。

访问网页

prometheus(普罗米修斯)_第2张图片

简单查看一下,Prometheus 导出的关于自身的一个指标被称为 (Prometheus 服务器所服务的请求总数)。

prometheus(普罗米修斯)_第3张图片

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

prometheus(普罗米修斯)_第4张图片

prometheus(普罗米修斯)_第5张图片

修改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=` 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的数据。
prometheus(普罗米修斯)_第6张图片

prometheus(普罗米修斯)_第7张图片
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(普罗米修斯)_第8张图片
选择数据源为Prometheus
prometheus(普罗米修斯)_第9张图片

prometheus(普罗米修斯)_第10张图片

填写好后滚动到最后面保存
prometheus(普罗米修斯)_第11张图片
导入模板
Grafana模板下载: link.
prometheus(普罗米修斯)_第12张图片

官网下载好看的模板导入,我这里使用的模板id是8919
prometheus(普罗米修斯)_第13张图片
选择prometheus导入
prometheus(普罗米修斯)_第14张图片
prometheus(普罗米修斯)_第15张图片

你可能感兴趣的:(运维,linux,自动化)