一.在业务中遇到服务器负载过高问题,由于没有监控,一直没发现,直到业务方反馈网站打开速度慢,才发现问题。这样显得开发很被动。所以是时候搭建一套监控系统了。
由于是业余时间自己捯饬,所以神马业务层面的监控先不做,先用最简单的方式接入系统层面的监控,例如服务器、数据库等。
调研了一段时间,发现Prometheus+Grafana还是可以的。这里就主要记录一下搭建的过程。

二.基本概念

1.什么是Prometheus?

Prometheus:时间序列化数据库,我的理解就是将数据打上标签,以时间维度存储。后面有机会在深入研究。

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker 。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。

2.Prometheus的特点

一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。
非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。
一种灵活的查询语言。
不依赖分布式存储,单个服务器节点。
时间集合通过HTTP上的PULL模型进行。
通过中间网关支持推送时间。
通过服务发现或静态配置发现目标。
多种模式的图形和仪表板支持。

三.Prometheus架构概览

1.它的服务过程是这样的Prometheus daemon负责定时去目标上抓取metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。

2.Prometheus Server:Prometheus服务端,由于存储及收集数据,提供相关api对外查询用。支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。

3.Exporter:类似传统意义上的被监控端的agent,有区别的是,它不会主动推送监控数据到server端,而是等待server端定时来手机数据,即所谓的主动监控。

4.Pushagateway:用于网络不可直达而居于exporter与server端的中转站。这个组件是支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。如果有使用过statsd的用户,则会觉得这十分相似,只是statsd是直接发送给服务器端,而Prometheus主要还是靠进程主动去抓取。

5.Alertmanager:报警组件,将报警的功能单独剥离出来放在alertmanager。是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

6.Web UI:Prometheus的web接口,可用于简单可视化,及语句执行或者服务状态监控。

四.Prometheus监控基本原理

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。

五.Prometheus服务过程

1.Prometheus Daemon 负责定时去目标上抓取metrics(指标)数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。Prometheus支持通过配置文件、文本文件、Zookeeper、Consul、DNS SRV Lookup等方式指定抓取目标。Prometheus采用PULL的方式进行监控,即服务器可以直接通过目标PULL数据或者间接地通过中间网关来Push数据。

2.Prometheus在本地存储抓取的所有数据,并通过一定规则进行清理和整理数据,并把得到的结果存储到新的时间序列中。

3.Prometheus通过PromQL和其他API可视化地展示收集的数据。Prometheus支持很多方式的图表可视化,例如Grafana、自带的Promdash以及自身提供的模版引擎等等。Prometheus还提供HTTP API的查询方式,自定义所需要的输出。

4.PushGateway支持Client主动推送metrics到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

5.Alertmanager是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。

六.Prometheus 三大套件

1.Server 主要负责数据采集和存储,提供PromQL查询语言的支持。

2.Alertmanager 警告管理器,用来进行报警。

3.Push Gateway 支持临时性Job主动推送指标的中间网关。

七. 安装 Prometheus Server

1.1 运行用户创建

groupadd prometheus
useradd -g prometheus -m -d /opt/prometheus/ -s /sbin/nologin prometheus

1.2 prometheus server安装

wget http://10.200.77.3:90/Monitor/prometheus/prometheus-2.14.0.linux-amd64.tar.gz
tar xzf prometheus-2.14.0.linux-amd64.tar.gz -C /opt/
cd /opt/prometheus-2.14.0.linux-amd64

1.3 prometheus配置语法校验
建议每次修改prometheus配置之后, 都进行语法校验, 以免导致 prometheus server无法启动.

./promtool check config prometheus.yml

1.4 启动Prometheus
此时采用默认配置启动 prometheus server 看下界面, 稍后介绍如何监控Linux 服务器。

./prometheus --config.file=prometheus.yml

1.5 通过浏览器访问prometheus

发现 target 中只有 prometheus server, 因为我们还没有加入其他监控, 下面进行介绍, 后续博文中还将陆续介绍如何监控 redis, RabbitMQ, Kafka, nginx, java等常见服务。

prometheus默认配置:

# 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: 10sstatic_configs:- targets: ['localhost:9090']

1.6 设置prometheus系统服务,并配置开机启动

touch /usr/lib/systemd/system/prometheus.service
chown prometheus:prometheus /usr/lib/systemd/system/prometheus.service
vim /usr/lib/systemd/system/prometheus.service

将如下配置写入prometheus.servie

[Unit]
Description=Prometheus
Documentation=https://prometheus.io/
After=network.target[Service]
Type=simple
User=prometheus
# --storage.tsdb.path是可选项,默认数据目录在运行目录的./dada目录中
ExecStart=/opt/prometheus/prometheus --config.file=/opt/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/opt/prometheus/data --storage.tsdb.retention=60d
Restart=on-failure[Install]
WantedBy=multi-user.target

八.Prometheus启动参数说明

–config.file – 指明prometheus的配置文件路径
–web.enable-lifecycle – 指明prometheus配置更改后可以进行热加载
–storage.tsdb.path – 指明监控数据存储路径
–storage.tsdb.retention --指明数据保留时间

九.设置开机启动

systemctl daemon-reload
systemctl enable prometheus.service
systemctl status prometheus.service
systemctl restart prometheus.service

说明: prometheus在2.0之后默认的热加载配置没有开启, 配置修改后, 需要重启prometheus server才能生效, 这对于生产环境的监控是不可容忍的, 所以我们需要开启prometheus server的配置热加载功能.

在启动prometheus时加上参数 web.enable-lifecycle , 可以启用配置的热加载, 配置修改后, 热加载配置:

curl -X POST  http://localhost:9090/-/reload

十. Prometheus 配置监控其他Linux主机

2.1 node_exporter安装配置

# 运行用户添加
groupadd prometheus
useradd -g prometheus -m -d /usr/local/node_exporter/ -s /sbin/nologin prometheus # 下载node_serverwget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz # 解压到指定目录并删除下载文件
tar -zxf node_exporter-0.18.1.linux-amd64.tar.gz mv node_exporter-0.18.1.linux-amd64 /usr/local/ ln -sv /usr/local/node_exporter-0.18.1.linux-amd64 /usr/local/node_exporter rm -f node_exporter-0.18.1.linux-amd64.tar.gz# 系统服务配置
node_exporter touch /usr/lib/systemd/system/node_exporter.service chown prometheus:prometheus /usr/lib/systemd/system/node_exporter.service chown -R prometheus:prometheus /usr/local/node_exporter* vim /usr/lib/systemd/system/node_exporter.service

在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 服务并设置开机启动

systemctl daemon-reload
systemctl enable node_exporter.service
systemctl start node_exporter.service
systemctl status node_exporter.service
systemctl restart node_exporter.service
systemctl start node_exporter.service
systemctl stop node_exporter.service

node_exporter启动成功后, 你就可以通过如下api看到你的监控数据了(将下面的node_exporter_server_ip替换成你的node_exporter的IP地址, 放到浏览器中访问就可以了 )。

http://node_exporter_server_ip:9100/metrics

为了更好的展示, 接下来我们将这个api 配置到 prometheus server中, 并通过grafana进行展示.

将 node_exporter 加入 prometheus.yml配置中

  - job_name: 'Linux'file_sd_configs:- files: ['/opt/prometheus/sd_cfg/Linux.yml']refresh_interval: 5s

并在文件/opt/prometheus/sd_cfg/Linux.yml中写入如下内容

- targets: ['IP地址:9100']labels:name: Linux-node1[这里建议给每个主机打个有意义的标签,方便识别.]

如果你按照上面的方式配置了, 但是使用工具 promtool检测prometheus配置时,没有通过, 那肯定是你写的语法有问题, 不符合yml格式. 请仔细检查下. 如有疑问, 可以在下方评论区留言.

这样做的好处是, 方便以后配置监控自动化, 规范化, 将每一类的监控放到自己的配置文件中, 方便维护.

当然, 如果你的服务器少, 要监控的组件少的话, 你也可以将配置都写入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: 10sstatic_configs:- targets: ['localhost:9090']- job_name: 'Linux'static_configs:    targets: ['http://10.199.111.110:9100']    labels:group: 'client-node-exporter'

重载prometheus配置

curl -X POST  http://localhost:9090/-/reload

十一.数据展示Grafana安装配置

1.Prometheus中存储的数据,通过Grafana很优美的展现出来。

下载地址: https://grafana.com/grafana/download

wget https://dl.grafana.com/oss/release/grafana-6.5.1-1.x86_64.rpm
sudo yum localinstall grafana-6.5.1-1.x86_64.rpm

granafa默认端口为3000,可以在浏览器中输入http://localhost:3000/

granafa首次登录账户名和密码admin/admin,可以修改
配置数据源Data sources->Add data source -> Prometheus,输入prometheus数据源的信息,主要是输入name和url

添加 Dashboard -> New Dashboard -> Import Dashboard -> 输入11074,导入Linux监控模板. 并配置数据源为Prometheus,即上一步中的name
配置完保存后即可看到逼格非常高的系统主机节点监控信息,包括系统运行时间, 内存和CPU的配置, CPU、内存、磁盘、网络流量等信息, 以及磁盘IO、CPU温度等信息。


Linux安装prometheus+grafana监控相关推荐

  1. Mac安装prometheus+grafana监控

    软件安装 Prometheus 官网下载(https://prometheus.io/),支持Linux.Mac.Windows系统,很好很强大.我这里安装过Centos和Mac,这里的实例以Mac为 ...

  2. 使用Prometheus+Grafana 监控MySQL/MONGODB

    使用Prometheus+Grafana 监控MySQL/MONGODB 之前就久仰 Prometheus 大名,因为有用zabbix 进行监控,就没去安装它.现在正好用上监控MONGO+MYSQL. ...

  3. Prometheus+Grafana监控PostgreSQL

    Prometheus+Grafana监控PostgreSQL Prometheus:2.32.0 Grafana:8.3.3 PG:13.2 Linux:CentOS7.6 docker:18.06. ...

  4. prometheus+grafana监控以及企业微信告警

    prometheus+grafana监控以及企业微信告警(单机二进制部署) 一.下载部署包,更改其中两个包名称,放到/data下 1.安装包以及解压步骤 grafana-enterprise-8.4. ...

  5. kubernetes(k8s) 安装 Prometheus + Grafana

    kubernetes(k8s) 安装 Prometheus + Grafana 组件说明 MetricServer:是kubernetes集群资源使用情况的聚合器,收集数据给kubernetes集群内 ...

  6. Grafana监控系统之Prometheus+Grafana监控系统搭建

    Grafana监控系统之Prometheus+Grafana监控系统搭建 本文章内容较长,可通过右上角点击目录快速定位想看的内容 => => 一. 概述 1.1 Grafana介绍 Gra ...

  7. Prometheus+Grafana 监控 MySQL

    Prometheus 获取 MySQL 的监控数据,并通过 Grafana 展示的过程.首先来看整体架构图: 1 架构图 如上图,通过 mysql_exporter 获取 MySQL 的监控数据,通过 ...

  8. 基于Prometheus+Grafana监控SQL Server数据库

    墨墨导读:本文整理了基于Prometheus+Grafana监控SQL Server数据库的全过程,分享至此,希望对大家有帮助. 搭建SQL Server环境 使用容器建立SQL Server环境非常 ...

  9. 搭建prometheus+grafana监控系统

    prometheus简介 Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 .自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发 ...

最新文章

  1. wamp如何更改网站根目录DocumentRoot
  2. 流程管理产品小故事汇总贴
  3. python元组和列表教程_Python列表和元组
  4. 携程开源Redis多数据中心解决方案-XPipe
  5. 【python】python2.x中的除法
  6. python tutorial_Python Tutorial笔记
  7. 爬虫推特数据分析的外文文献_13天让你学会爬虫分布式,说到让你做到择推出it届附教程...
  8. make: warning:  Clock skew detected.  Your build may be incomplete.
  9. 动态切换父元素隐藏和显示里面的子元素的动画会再一次执行吗?
  10. 量子计算机是否存在相对论,潘建伟团队再登Science:寻找广义相对论与量子力学的桥梁...
  11. 网口监视报文工具_真是神器!这款网络排查工具!
  12. vue-router传参的坑(query和params)
  13. 华为方舟编译器正式开源,采用自主平台托管
  14. 跨平台最好用笔记软件——Simplenote
  15. 如何在eclipse里使用git
  16. 数据库JDBCUtil 工具类 增加连接池操作
  17. 51nod 1791 合法括号子段
  18. matplotlib画正态分布图
  19. 蚂蚁集团副总裁,任复旦大学人工智能学院院长!
  20. android 编译libjpeg-turbo

热门文章

  1. mac终端配置Android ADB命令
  2. 洛谷 P3387 【模板】缩点
  3. Objective-C ,ios,iphone开发基础:UIAlertView使用详解
  4. 数据结构 顺序串笔记
  5. CentoS 下报的 Requires: perl(:MODULE_COMPAT_5.8.8)
  6. Redis缓存异常的容错实现方法( .net)
  7. ubuntu下创建定时任务的两种方式及常见问题解决方案
  8. 【干货】2021百度营销通案.pdf(附下载链接)
  9. PyTorch系列入门到精通——GPU的使用
  10. 全球首发!惯性导航导论(剑桥大学)第四部分