Prometheus详解(一)

目录

前言

一、常见监控软件介绍

1、cactio

2、nagios

3、zabbix (php)(推荐)

二、运维监控平台设计思路

1、思路

2、分层

3、Prometheus监控体系

三、Prometheus

1、Prometheus 介绍

2、Prometheus 特点

3、Prometheus生态组件

4、 收集数据

5、服务分类

6、Prometheus的优缺点及特点

7、工作流程

8、数据类型

四、prometheus部署

1、准备环境

2、创建用户

3、上传安装包,解压,点击下载 

4、更改文件夹位置

5、修改配置文件

6、添加为系统服务

7、添加开机自启,启动,查看

8、测试

总结 


前言

本文写的主要是prometheus各个组件的概要部署,详细各个组件实现的功能详见具体文章

一、常见监控软件介绍

1、cactio

cacti不是监控工具,他是个依赖于SNMP的数据采集和数据呈现的工具。

功能:数据采集、 保存数据[SQL, txt].
数据展示(rrdtool 绘图)。
数据分析和报警(很一般)。

2、nagios

功能:数据报警(报警功能是Nagios的特色功能) [ 故障触发,故障恢复都可以。
依赖分析报警(能自动的识别到关键设备的故障,关联设备不会报警)。

数据采集(采集的数据是弱项,他只关心警戒位,只关心正常与否的状态,状态转换时可以实现报警,所以它采集的数据不需要保存),当然也有插件弥补这个不足,如PNP4Nagios。

3、zabbix (php)(推荐)

Nagiostcacti整合互相弥补不足!I

nagios和 cacti不适合超大规模的监控、由于大规模的带宽和网络限制,会导致监控的延迟等问题,所以有很多是 nagios+ cacti整合,但是依然不适合在大规模的环境中,不适合分布式部署, Nagios在大规模中就会出现延迟,失
去 Nagios本事的特色。
那么 zabbix同时整合了 cacti和 Nagios特点的工具,而且还具有了前两者不具有的工具,支持分布式等等。

二、运维监控平台设计思路

1、思路

数据收集模块
数据提取模块
监控告警模块

2、分层

第六层:用户展示管理层同一用户管理、集中监控、集中维护
第五层:告警事件生成层 实时记录告警事件、形成分析图表(趋势分析、可视化)
第四层:告警规则配置层告警规则设置、告警伐值设置
第三层:数据提取层 定时采集数据到监控模块
第二层:数据展示层数据生成曲线图展示(对时序数据的动态展示)
第一层:数据收集层 多渠道监控数据

3、Prometheus监控体系

监控⼀般可分为 : 业务级别监控 / 系统级别监控 / ⽹络监控 / 程序代码监控/ ⽇志监控 / ⽤户⾏为分析监控/ 其他种类监控

业务监控 可以包含 ⽤户访问QPS,DAU⽇活,访问状态(http code), 业务接⼜(登陆,注
册,聊天,上传,留⾔,短信,搜索),产品转化率,充值额度,⽤户投诉 等等这些很宏观的概
念(上层)
系统监控 主要是跟操作系统相关的 基本监控项 CPU/ 内存 / 硬盘 / IO / TCP链接 / 流量 等等
(Nagios - plugins, prometheus)
⽹络监控 (IDC)对⽹络状态的监控(交换机,路由器,防⽕墙,VPN) 互联⽹公司必不可
少 但是很多时候又被忽略 例如:内⽹之间(物理内⽹,逻辑内⽹ 可⽤区 创建虚拟机 内⽹IP )
外⽹ 丢包率 延迟 等等
⽇志监控 监控中的重头戏(Splunk,ELK),往往单独设计和搭建, 全部种类的⽇志都有需要采
集 (syslog, soft, ⽹络设备,⽤户⾏为) • 程序监控 ⼀般需要和开发⼈员配合,程序中嵌⼊各种接⼜ 直接获取数据 或者特质的⽇志格式
 

三、Prometheus

1、Prometheus 介绍

因为Prometheus的高扩展性、高性能、生态好,部署复杂度低,所以这里我们主要讲Prometheus

Prometheus是最初在SoundCloud上构建的开源系统监视和警报工具包 。自2012年成立以来,许多公司和组织都采用了Prometheus,该项目拥有非常活跃的开发人员和用户社区。现在,它是一个独立的开源项目,并且独立于任何公司进行维护。为了强调这一点并阐明项目的治理结构,Prometheus 在2016年加入了 Cloud Native Computing Foundation,这是继Kubernetes之后的第二个托管项目

Prometheus(由go语言(golang)开发)是一套开源的监控&报警&时间序列数据库的组合。

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

2、Prometheus 特点

多维数据模型:由度量名称和键值对标识的时间序列数据

PromSQL:一种灵活的查询语言,可以利用多维数据完成复杂的查询

不依赖分布式存储,单个服务器节点可直接工作

基于HTTP的pull方式采集时间序列数据

推送时间序列数据通过PushGateway组件支持

通过服务发现或静态配置发现目标

多种图形模式及仪表盘支持(grafana)

适用于以机器为中心的监控以及高度动态面向服务架构的监控

3、Prometheus生态组件

Prometheus server - 收集和存储时间序列数据
Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给 Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
pushgateway - 对于短暂运行的任务,负责接收和缓存时间序列数据,同时也是一个数据源
exporter - 各种专用exporter,面向硬件、存储、数据库、HTTP服务等
alertmanager - 处理报警
webUI等,其他各种支持的工具

4、 收集数据

监控概念:白盒监控、黑盒监控
白盒监控:自省方式,被监控端内部,可以自己生成指标,只要等待监控系统来采集时提供出去即可
黑盒监控:对于被监控系统没有侵入性,对其没有直接"影响",这种类似于基于探针机制进行监控(snmp协议)

Prometheus支持通过三种类型的途径从目标上"抓取(Scrape)"指标数据(基于白盒监控)

Exporters一>工作在被监控端,周期性的抓取数据并转换为pro兼容格式等待prometheus来收集,自己并不推送

Instrumentation——>指被监控对象内部自身有数据收集、监控的功能,只需要prometheus直接去获取

Pushgateway一>短周期5s-10s的数据收集

5、服务分类

在线服务:请求的客户端和发起者需要立即响应(高并发、低延迟:并发数、接口响应时间、错误数、延迟时间),面对突发流量能进行资源的自动伸缩。

离线服务:请求发送到服务端但不要求立即获取结果(监控服务的每个执行阶段、成功/失败的次数)。

批处理:批量任务的执行(一般定时执行),针对每个任务的执行耗时、待处理任务、阻塞任务、处理成功/失败的任务数。

6、Prometheus的优缺点及特点

优点:

1、非常少的外部依赖,安装使用超简单
2、已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等
3、服务自动化发现
4、直接集成到代码
5、设计思想是按照分布式、微服务架构来实现的

缺点:

1、Prometheus 是基于 Metric 的监控,不适用于日志(Logs)、事件(Event)、调用链(Tracing)。
2、Prometheus 默认是 Pull 模型,合理规划你的网络,尽量不要转发。
3、对于集群化和水平扩展,官方和社区都没有银弹,需要合理选择 Federate、Cortex、Thanos 等方案。
4、监控系统一般情况下可用性大于一致性,容忍部分副本数据丢失,保证查询请求成功。这个后面说 Thanos 去重的时候会提到。
5、Prometheus 不一定保证数据准确,这里的不准确一是指 rate、histogram_quantile 等函数会做统计和推断,产生一些反直觉的结果,这个后面会详细展开。二来查询范围过长要做降采样,势必会造成数据精度丢失,不过这是时序数据的特点,也是不同于日志系统的地方。

特点:

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

7、工作流程

1、Prometheus server 定期从配置好的 jobs 或者 exporters(出口) 中拉metrics(指标),或者接收来自 Pushgateway 发过来的 metrics(指标),或者从其他的 Prometheus server 中拉 metrics(指标)。
2、默认使用的拉取方式是pull,也可以使用pushgateway提供的push方式获取各个监控节点的数据。
3、将获取到的数据存入TSDB,一款时序型数据库。
4、此时prometheus已经获取到了监控数据,可以使用内置的PromQL进行查询。
5、它的报警功能使用Alertmanager提供,Alertmanager是prometheus的告警管理和发送报警的一个组件。
6、prometheus原生的图标功能过于简单,可将prometheus数据接入grafana,由grafana进行统一管理。

8、数据类型

prometheus存储的是时序数据,即按相同时序(相同名称和标签),以时间维度存储连续的数据的集合。

时序(time series)是由名字(Metric)以及一组key/value标签定义的,具有相同的名字以及标签属于相同时序。

metric名字:表示metric的功能,如http_request_total。时序的名字由 ASCII 字符,数字,下划线,以及冒号组成,它必须满足正则表达式 [a-zA-Z_:][a-zA-Z0-9_:]*, 其名字应该具有语义化,一般表示一个可以度量的指标,例如 http_requests_total, 可以表示 http 请求的总数。

Metric类型:
Counter: 一种累加的metric,如请求的个数,结束的任务数,出现的错误数等
Gauge: 常规的metric,如温度,可任意加减。其为瞬时的,与时间没有关系的,可以任意变化的数据。
Histogram: 柱状图,用于观察结果采样,分组及统计,如:请求持续时间,响应大小。其主要用于表示一段时间内对数据的采样,并能够对其指定区间及总数进行统计。根据统计区间计算
Summary: 类似Histogram,用于表示一段时间内数据采样结果,其直接存储quantile数据,而不是根据统计区间计算出来的。不需要计算,直接存储结果



标签:使同一个时间序列有了不同维度的识别。例如 httprequests_total{method=”Get”} 表示所有 http 请求中的 Get 请求。当 method=”post” 时,则为新的一个 metric。标签中的键由 ASCII 字符,数字,以及下划线组成,且必须满足正则表达式 [a-zA-Z:][a-zA-Z0-9_:]*。

样本:按照某个时序以时间维度采集的数据,称之为样本。实际的时间序列,每个序列包括一个float64的值和一个毫秒级的时间戳
    一个 float64 值
    一个毫秒级的 unix 时间戳

格式:Prometheus时序格式与OpenTSDB相似
{=,…},例如:http_requests_total{method=”POST”,endpoint=”/api/tracks”}。

四、prometheus部署

1、准备环境

# 个人环境:centos 7
[root@fp-21 ~]# hostname -I
10.0.0.21 

# 时间校正,这里是阿里云标准时间
[root@fp-21 ~]# ntpdate ntp.aliyun.com
29 Mar 16:36:37 ntpdate[9790]: step time server 203.107.6.88 offset -43198.785235 sec

# 关闭防火墙
[root@fp-21 ~]# systemctl stop firewalld.service

# 修改 selinux 为警告模式
[root@fp-21 ~]# setenforce 0

2、创建用户

# 创建 prometheus 的组和用户
[root@fp-21 ~]# groupadd prometheus
[root@fp-21 ~]# useradd -M -s /sbin/nologin prometheus -g prometheus

3、上传安装包,解压,点击下载 

# 没有本地安装包,也可以进行下载
[root@fp-21 ~]# cd /opt/ ; mkdir prometheus ; cd prometheus
[root@fp-21 prometheus]# wget -c https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz

# 解压
[root@fp-21 prometheus]# tar xf prometheus-2.16.0.linux-amd64.tar.gz 
[root@fp-21 prometheus]# ls
prometheus-2.16.0.linux-amd64  prometheus-2.16.0.linux-amd64.tar.gz

4、更改文件夹位置

[root@fp-21 prometheus]# mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus

# 创建所需目录
[root@fp-21 prometheus]# mkdir conf relus data

# 修改配置文件路径
[root@fp-21 prometheus]# mv prometheus.yml conf

# 复制可执行文件至 /usr/local/bin
[root@fp-21 prometheus]# cp prometheus promtool tsdb /usr/local/bin/

# 授权
[root@fp-21 prometheus]# chown -R prometheus:prometheus /usr/local/prometheus

5、修改配置文件

[root@fp-21 prometheus]# cd conf
[root@fp-21 conf]# cp prometheus.yml prometheus.yml.bak
[root@fp-21 conf]# vim prometheus.yml
 23   - job_name: 'prometheus'		# 标签,监控任务的名称
 28     static_configs:		# 抓取的目标
 29     - targets: ['10.0.0.21:9090']

6、添加为系统服务

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

[Unit]
Description=prometheus-server
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target
 
[Service]
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/conf/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/usr/local/prometheus/data --storage.tsdb.retention.time=7d --web.max-connections=512 --web.read-timeout=3m --query.max-concurrency=25 --query.timeout=2m
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
 
[Install]
WantedBy=multi-user.target

7、添加开机自启,启动,查看

# 重新加载
[root@fp-21 ~]# systemctl daemon-reload

# 添加至开机自启
[root@fp-21 ~]# systemctl enable prometheus.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/prometheus.service to /usr/lib/systemd/system/prometheus.service.

# 启动服务
[root@fp-21 ~]# systemctl start prometheus.service 

# 查看端口
[root@fp-21 ~]# ss -lntp |grep prometheus
LISTEN     0      128         :::9090                    :::*                   users:(("prometheus",pid=10887,fd=7))

# 查看进程
[root@fp-21 ~]# ps -ef |grep prometheus
root      10887      1  3 19:59 ?        00:00:00 /usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/conf/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/usr/local/prometheus/data --storage.tsdb.retention.time=7d --web.max-connections=512 --web.read-timeout=3m --query.max-concurrency=25 --query.timeout=2m
root      10926   9766  0 20:00 pts/0    00:00:00 grep --color=auto prometheus

8、测试

访问 IP 进行查看 prometheus

Prometheus详解(一)_第1张图片

查看监控任务的状态

Prometheus详解(一)_第2张图片

总结 

本文详细总结几种监控软件,以及prometheus的介绍及安装。

你可能感兴趣的:(运维)