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.35.0/prometheus-2.35.0.linux-amd64.tar.gz
[root@linux-node1 src]# tar zxf prometheus-2.35.0.linux-amd64.tar.gz
[root@linux-node1 src]# mv prometheus-2.35.0.linux-amd64 /usr/local/
[root@linux-node1 src]# ln -s /usr/local/prometheus-2.35.0.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 --now 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/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
[root@linux-node1 src]# tar zxf node_exporter-1.3.1.linux-amd64.tar.gz
[root@linux-node1 src]# mv node_exporter-1.3.1.linux-amd64 /usr/local/
[root@linux-node1 src]# ln -s /usr/local/node_exporter-1.3.1.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 --now 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: 'node'
    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 ~]# vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm
repo_gpgcheck=0
enabled=1
gpgcheck=0

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

2.配置Grafana

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

[root@linux-node1 ~]# vim /etc/grafana/grafana.ini
[security]
admin_user = admin
admin_password = 123456.coM

3.启动Grafana

[root@linux-node1 ~]# systemctl enable --now 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,用户名和密码为在配置文件中设置的。

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该文件修订时间: 2022-07-29 09:23:08

results matching ""

    No results matching ""