在Ubuntu上搭建Prometheus + Grafana监控系统

一、序言

Prometheus是一个功能强大的开源监控系统,可从您的服务中收集指标并将其存储在时间序列数据库中。它通过Grafana等工具提供多维数据模型,灵活的查询语言和多样化的可视化可能性。

默认情况下,Prometheus仅导出有关其自身的指标(例如,它收到的请求数,内存消耗等)。但是,您可以通过安装导出程序,生成其他指标的可选程序来大大扩展Prometheus 。

出口商 - Prometheus团队维护的官方出版物以及社区贡献的出口商 - 提供从基础设施,数据库和Web服务器到消息系统,API等所有内容的信息。

一些最受欢迎的选择包括:

node_exporter - 这将生成有关基础结构的度量标准,包括当前CPU,内存和磁盘使用情况,以及I / O和网络统计信息,例如从磁盘读取的字节数或服务器的平均负载。
blackbox_exporter - 这会生成从HTTP和HTTPS等探测协议派生的指标,以确定端点可用性,响应时间等。
mysqld_exporter - 收集与MySQL服务器相关的度量标准,例如执行的查询数,平均查询响应时间和集群复制状态。
rabbitmq_exporter - 输出有关RabbitMQ消息传递系统的指标,包括发布的消息数,准备发送的消息数以及队列中所有消息的大小。
nginx-vts-exporter - 提供有关使用Nginx VTS模块的Nginx Web服务器的指标,包括打开的连接数,发送的响应数(按响应代码分组)以及发送或接收的请求的总大小(以字节为单位) 。

二、部署Prometheus

官网下载页面找到最新的二进制文件下载并校验

cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz
shasum prometheus-2.28.1.linux-amd64.tar.gz
# 将校验码和官网的进行比较,确保下载的文件正确且未损坏

将文件解压到指定目录

tar  xf prometheus-2.14.0.linux-amd64.tar.gz -C /usr/local

为了方便配置,可以做软连接

ln -sv /usr/local/prometheus-2.14.0.linux-amd64/ /usr/local/Prometheus

接着修改prometheus的配置文件

  1. 在global设置中,定义抓取指标的默认时间间隔。请注意,除非单个导出器自己的设置覆盖全局变量,否则Prometheus会将这些设置应用于每个导出器。
  2. scrape_interval值告诉Prometheus 每15秒从其出口商那里收集指标,这对于大多数出口商而言足够长。
  3. 使用scrape_configs指令将Prometheus本身添加到导出器列表中。
  4. 使用job_name在标签和图表上标记出口商,因此请务必在此处选择描述性内容。
  5. 使用static_configs和targets指令来确定导出器的运行位置。
[root@prometheus ~]# vim /usr/local/Prometheus/prometheus.yml 
# 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']

后台启动prometheus

nohup /usr/local/Prometheus/prometheus --config.file=/usr/local/Prometheus/prometheus.yml &

在根目录下的nohup.out文件中可以看到prometheus的运行状态

创建Prometheus的systemd服务

sudo vim /etc/systemd/system/prometheus.service

服务文件告诉systemd,您将Prometheus作为prometheus用户运行,并且配置文件位于/etc/prometheus/prometheus.yml目录中,并将其数据存储在/var/lib/prometheus目录中。配置文件内容如下:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
​
[Service]
# 账户和组设置,可以保证数据安全
# User=prometheus
# Group=prometheus
Type=simple
ExecStart=/usr/local/Prometheus/prometheus \
    --config.file /usr/local/Prometheus/prometheus.yml \
#  --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/usr/local/Prometheus/consoles \
    --web.console.libraries=/usr/local/Prometheus/console_libraries
​
[Install]
WantedBy=multi-user.target

编辑完成后保存退出,要使用新创建的服务,需要重新加载systemd。

sudo systemctl daemon-reload

并可以使用以下命令启动Prometheus:

sudo systemctl start prometheus

要确保Prometheus正在运行,可以检查服务的状态。

sudo systemctl status prometheus

输出结果会告诉您Prometheus的状态,主进程标识符(PID),内存使用等。如果服务的状态不是active,在继续本教程之前重新跟踪上述步骤以解决问题。
在这里插入图片描述

Q可退出status命令。

通过如下URL可以打开prometheus的自带监控界面: localhost:9090,当然端口或IP也可以自己设定。
在这里插入图片描述

启用服务以在开机时启动:

sudo systemctl enable prometheus

三、部署Node Exporter

各组件默认端口:

node 默认端口:9100
mysql默认端口:9104
redis 默认端口:9121
process默认端口:9256
alertmanager默认端口:9093

要将Prometheus扩展到仅关于自身的指标之外,我们将安装另一个名为Node Exporter的节点导出器。节点导出器提供有关系统的详细信息,包括CPU,磁盘和内存使用情况。

接下来的下载、校验、解压缩,和之前的prometheus类似。

cd ~
curl -LO https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
sha256um node_exporter-1.1.2.linux-amd64.tar.gz
tar xf node_exporter-1.1.2.linux-amd64.tar.gz -C /usr/local

接着为Node Exporter创建Systemd服务文件。

sudo vim /etc/systemd/system/node_exporter.service

将以下内容复制上去,编辑完成后保存退出。

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/node_exporter-1.1.2.linux-amd64/node_exporter

[Install]
WantedBy=multi-user.target

重新加载systemd以使用新的创建的服务。

sudo systemctl daemon-reload

运行Node Exporter。

sudo systemctl start node_exporter

验证运行状态。

sudo systemctl status node_exporter

在这里插入图片描述
设置节点导出器开机启动。

sudo systemctl enable node_exporter

如果想额外配置mysql、redis之类的,步骤如三、四类似

四、配置Prometheus以刮取节点导出器

因为Prometheus只抓取在其配置文件scrape_configs部分中定义的导出器,所以我们需要为Node Exporter添加一个条目,就像我们为Prometheus本身所做的那样。

修改prometheus的配置文件。

[root@prometheus ~]# vim /usr/local/Prometheus/prometheus.yml 
# 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'
    scrape_interval: 5s

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
 
  - job_name: 'node_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['localhost:9100'] 

重新启动prometheus并检查运行状态。

sudo systemctl restart prometheus
sudo systemctl status prometheus

在这里插入图片描述

五、添加节点进行主机管理

在添加大量主机集群时,一台一台在prometheus.yml中添加,显然不太方便,我们通过编写发现文件,进行批量主机管理。

cd /usr/local/Prometheus
mkdir -p /usr/local/Prometheus/targets/node
sudo vim /usr/local/Prometheus/targets/node/node.yml
- targets: 
  - '172.16.12.1:9100'
  - '172.16.12.5:9100'
  - '172.16.12.110:9100'
  - '172.16.12.112:9100'
  labels:
    idc: "Temporary RWE Server"               # 备注集群名

修改prometheus配置文件。

vim /usr/local/Prometheus/prometheus/prometheus.yml
  - job_name: 'nm_mch-app_node'
    file_sd_configs:
      - files: ['/usr/local/Prometheus/prometheus/targets/node/node.yml']
        refresh_interval: 5s

在这里插入图片描述
重新启动prometheus并检查运行状态。

sudo systemctl restart prometheus
sudo systemctl status prometheus

六、使用Grafana创建可视化Dashboard

Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。

可在官网下载页面下载最新的二进制文件,tar安装过程参考如下:

wget https://dl.grafana.com/oss/release/grafana-8.0.4.linux-amd64.tar.gz
tar -zxvf grafana-8.0.4.linux-amd64.tar.gz -C /usr/local
ln -sv /usr/local/grafana-8.0.4/ /usr/local/Prometheus_grafana

配置systemd启动Grafana。

sudo vim /lib/systemd/system/grafana-server.service
[Unit]
Description=Grafana
After=network-online.target

[Service]
ExecStart=/usr/local/Prometheus_grafana/bin/grafana-server --config=/usr/local/Prometheus_grafana/conf/defaults.ini

[Install]
WantedBy=multi-user.target

重载配置并设置开机自启。

systemctl daemon-reload
systemctl start grafana-server
systemctl enable grafana-server 

参考文献:

  1. 如何在Ubuntu 16.04上安装Prometheus
  2. Prometheus中文文档
  3. Promethus官网手册
  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Magician0619

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值