1.1. Prometheus快速入门

1.1.1. Prometheus架构介绍

在学习Prometheus之前我们需要清晰的掌握其架构,Prometheus是由多个组件组成的的监控系统,主要有:Prometheus Server、Alertmanager、Pushgateway组成,这三个组件均为独立的应用服务,独立部署和运行,其中Prometheus Server中内置了Prometheus web UI。

architecture

Prometheus Server:

Promethedus Server是核心组件,负责数据的获取、存储、查询。Prometheus通过Pull的方式定期的从Jobs/Exporters中获取数据,并保存在内置的TSDB中;内置的Prometheus web UI可以让用户通过PromQL的方式进行数据的检索。

Exporters:

Exporters也是一个独立的组件,有官方提供的Exporters也有社区贡献的Exportes,它将监控采集的数据通过HTTP的方式暴露给Prometheus Server,Server定期获取数据。例如有一个Exporters叫做Node Exporter,它安装在受采集的主机上,为Server提供数据,有点类似于Zabbix监控系统中的Zabbix Agent。

Prometheus web UI:

Prometheus web UI是Server启动后内置的一个Web界面,通过该Web界面我们可以进行数据查询工作,不包含设置的相关功能。

PromQL:

PromQL是Prometheus内置的自定义的查询语言,提供对Prometheus Server中的TSDB这个时间序列数据库进行数据查询,支持数据聚合和一些逻辑运算,是一个相对简单的查询语言,而且PromQL也提供了一些内置函数,帮助我们进行数据处理。

Alertmanager:

Alertmanager是Promethedus的告警管理组件,它支持基于PromQL来创建告警规则,类似于Zabbix中的告警表达式,对获取到的数据进行计算和比较,如果满足PromQL定义的规则条件,就会产生报警。

Pushgateway:

Pushgateway可以理解为数据的一个中转站,例如当Prometheus Server不能直接和Exporters进行通信的场景下。

1.1.2. 安装Prometheus

学习Prometheus的第一步就是先部署一个实验环境,官方提供了多种方式进行Prometheus安装:

  • 源码编译安装

  • 下载预编译好的二进制文件

  • 使用Docker部署

  • 使用第三方工具:Ansible、SaltStack、Puppet、Chef。

为了方便学习,首先我们使用二进制方式部署,可以在这里https://prometheus.io/download/下载对应的预编译的二进制文件。

[root@linux-node1 ~]# cd /usr/local/src

[root@linux-node1 src]# wget
https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz

[root@linux-node1 src]# tar zxf prometheus-2.7.1.linux-amd64.tar.gz

[root@linux-node1 src]# mv prometheus-2.7.1.linux-amd64 /usr/local/

[root@linux-node1 src]# ln -s /usr/local/prometheus-2.7.1.linux-amd64/
/usr/local/prometheus

Prometheus配置

Prometheus的配置文件在prometheus.yml中,直接启动也会到命令的当前目录下寻找该文件。

[root@linux-node1 ~]# cd /usr/local/prometheus

[root@linux-node1 prometheus]# vim 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

默认情况下Prometheus会把数据写在启动目录的./data目录下,可以通过启动参数指定目录:--storage.tsdb.path="data/",更多参数可以通过—help查看

[root@linux-node1 prometheus]# ./prometheus –help

[root@linux-node1 prometheus]# ./prometheus

…

level=info ts=2019-02-12T08:04:03.799169159Z caller=main.go:620 msg="Starting
TSDB ..."
level=info ts=2019-02-12T08:04:03.835497463Z caller=main.go:635 msg="TSDB
started"
level=info ts=2019-02-12T08:04:03.835598421Z caller=main.go:695 msg="Loading
configuration file" filename=prometheus.yml
level=info ts=2019-02-12T08:04:03.83756508Z caller=main.go:722 msg="Completed
loading of configuration file" filename=prometheus.yml
level=info ts=2019-02-12T08:04:03.83760078Z caller=main.go:589 msg="Server is
ready to receive web requests."
level=info ts=2019-02-12T08:04:03.837641772Z caller=web.go:416 component=web
msg="Start listening for connections" address=0.0.0.0:9090

默认会在前台启动,并监听9090端口,会自动创建data目录,并存放数据。注意如何服务器时间不正确会有警告提示,请保证服务器时间同步。

放置在后台运行

[root@linux-node1 ~]# groupadd prometheus

[root@linux-node1 ~]# useradd -g prometheus -d /var/lib/prometheus -s /sbin/nologin prometheus

[root@linux-node1 ~]# vim /usr/lib/systemd/system/prometheus.service

[Unit]

Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target

后台启动

[root@linux-node1 ~]# systemctl enable prometheus

[root@linux-node1 ~]# systemctl start prometheus

查看启动状态

[root@linux-node1 ~]# netstat -ntlp | grep 9090

tcp6 0 0 :::9090 :::* LISTEN 61333/prometheus

1.1.3. 使用Node Exporter采集主机数据

[root@linux-node1 ~]# cd /usr/local/src
[root@linux-node1 src]# wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
[root@linux-node1 src]# tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
[root@linux-node1 src]# mv node_exporter-0.17.0.linux-amd64 /usr/local/
[root@linux-node1 src]# ln -s /usr/local/node_exporter-0.17.0.linux-amd64/ /usr/local/node_exporter

[root@linux-node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

启动Node Exporter

[root@linux-node1 ~]# systemctl enable node_exporter
[root@linux-node1 ~]# systemctl start node_exporter

查看状态

[root@linux-node1 ~]# netstat -ntlp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 66239/node_exporter

默认情况下Node Exporter监听9100端口,通过/metrics暴露采集到的监控数据,Prometheus默认也从该地址获取数据。

配置Prometheus读取Node Exporter数据

[root@linux-node1 ~]# vim /usr/local/prometheus/prometheus.yml
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: 'linux-node1'
    static_configs:
    - targets: ['192.168.56.11:9100']
      labels:
        instance: linux-node1

重启prometheus

[root@linux-node1 ~]# systemctl restart prometheus

查看监控状态

登录Prometheus的Web控制台,StatusTargets如果可以linux-node1并且状态是UP的状态即为配置成功。

1.1.4. 使用Prometheus UI查看数据

现在Prometheus会定期的从http://192.168.56.11:9100/metrics获取数据,并存储,我们可以使用Prometheus UI来查看监控数据。

1.1.5. 使用Grafana进行数据可视化

1.安装Grafana

[root@linux-node1 ~]# vim /etc/yum.repos.d/grafana.repo

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

[root@linux-node1 ~]# yum install -y grafana

2.配置Grafana

Grafana的配置文件在/etc/grafana/grafana.ini,默认情况下Grafana监听3000端口

[root@linux-node1 ~]# vim /etc/grafana/grafana.ini

3.启动Grafana

[root@linux-node1 ~]# systemctl enable grafana-server

[root@linux-node1 ~]# systemctl start grafana-server

[root@linux-node1 ~]# netstat -ntlp | grep 3000

tcp6 0 0 :::3000 :::* LISTEN 81427/grafana-serve

4.访问Grafana

访问http://192.168.56.11:3000,用户名和密码默认为admin/admin,第一次登陆会要求修改密码,请使用安全密码。

5.增加Prometheus数据源

点击

,然后选择

配置URL为:http://192.168.56.11:9090,并点击Save&Test。

6.设置Dashboard

数据源设置完毕后,就可以设置Dashboard图形展示,可以手动添加,也可以直接下载别人配置好保持的Json文件直接导入即可。

下载地址:https://grafana.com/dashboards/405,在右侧有Download Json按钮,下载该Json文件。

点击Home下的Import Dashboard

然后直接上传刚才下载的JSON文件。

导入完毕后,就可以在Grafana上查看对应节点的监控数据图表。你可以通过鼠标拖拽进行图表的自定义大小和位置的修改,效果如下:

Copyright © 赵班长@新运维社区 2019 all right reserved,powered by Gitbook该文件修订时间: 2021-02-28 09:00:58

results matching ""

    No results matching ""