Prometheus+Grafana

news2024/11/23 3:50:15

K8S

prometheus

  • K8S
    • 1.Prometheus(普罗米修斯)
    • 2.Prometheus可以做什么
    • 3.Prometheus的特点
    • 4.prometheus 相关组件
  • 二、prometheus与zabbix的区别
    • zabbix架构
    • 区别
  • 三、prometheus架构分析
    • 1.TSDB
    • 2.时间序列数据库的特点
    • 3.prometheus 相关组件
      • 1.prometheus 核心组件
      • 2.Prometheus官方exporter
    • 4.Third-party exporter
      • 1.主机指标收集
      • 2.软件指标收集
      • 3.系统指标收集
    • 4.Prometheus适用的场景
      • Prometheus不适用的场景
  • 四、在K8S平台部署prometheus
    • 1、物理机安装方式
      • 1,下载安装包
      • 2,安装服务
          • 192.168.122.50
            • 安装Prometheus
            • 安装influxdb
          • 192.168.122.40
            • 安装 Node_Exporter
          • 192.168.122.50
          • 192.168.122.20
            • 安装Grafana

1.Prometheus(普罗米修斯)

Prometheus (中文名:普罗米修斯)是由 SoundCloud 开发的开源监控报警系统和时序列数据库(TSDB).自2012年起,许多公司及组织已经采用 Prometheus,并且该项目有着非常活跃的开发者和用户社区.现在已经成为一个独立的开源项目。Prometheus 在2016加入 CNCF ( Cloud Native Computing Foundation ), 作为在 kubernetes 之后的第二个由基金会主持的项目。 Prometheus 的实现参考了Google内部的监控实现,与源自Google的Kubernetes结合起来非常合适。另外相比influxdb的方案,性能更加突出,而且还内置了报警功能。它针对大规模的集群环境设计了拉取式的数据采集方式,只需要在应用里面实现一个metrics接口,然后把这个接口告诉Prometheus就可以完成数据采集了,下图为prometheus的架构图

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

2.Prometheus可以做什么

在业务层用作埋点系统 Prometheus支持各个主流开发语言(Go,java,python,ruby官方提供客户端,其他语言有第三方开源客户端)。我们可以通过客户端方面的对核心业务进行埋点。如下单流程、添加购物车流程。在应用层用作应用监控系统 一些主流应用可以通过官方或第三方的导出器,来对这些应用做核心指标的收集。如redis,mysql。在系统层用作系统监控 除了常用软件, prometheus也有相关系统层和网络层exporter,用以监控服务器或网络。集成其他的监控 prometheus还可以通过各种exporte,集成其他的监控系统,收集监控数据,如AWS CloudWatch,JMX,Pingdom等等。不要用Prometheus做什么

prometheus也提供了Grok exporter等工具可以用来读取日志,但是prometheus是监控系统,不是日志系统。应用的日志还是应该走ELK等工具栈。

3.Prometheus的特点

1、多维数据模型(时序列数据由metric名和一组key/value组成)
2、灵活的查询语言(PromQl)
3、不依赖分布式存储,单个服务器节点是自主的
4、通过基于HTTP的pull方式采集时序数据
5、可以通过中间网关进行时序列数据推送(pushing)
6、目标服务器可以通过发现服务或者静态配置实现
7、支持多种多样的图表和界面展示,比如Grafana等
8、支持分层和水平联邦

4.prometheus 相关组件

prometheus 相关组件,Prometheus生态系统由多个组件组成,其中许多是可选的
1、Prometheus 主服务,用来抓取和存储时序数据
2、client library 用来构造应用或 exporter 代码 (go,java,python,ruby)
3、push 网关可用来支持短连接任务
4、可视化的dashboard (两种选择,promdash 和 grafana.目前主流选择是 grafana.)
4、一些特殊需求的数据出口(用于HAProxy, StatsD, Graphite等服务)
5、实验性的报警管理端(alartmanager,单独进行报警汇总,分发,屏蔽等 )

二、prometheus与zabbix的区别

zabbix架构

在这里插入图片描述

在这里插入图片描述

区别

在这里插入图片描述

三、prometheus架构分析

在这里插入图片描述

1.TSDB

TSDB(Time Series Database)时序列数据库,我们可以简单的理解为一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的。

2.时间序列数据库的特点

大部分时间都是写入操作。
写入操作几乎是顺序添加,大多数时候数据到达后都以时间排序。
写操作很少写入很久之前的数据,也很少更新数据。大多数情况在数据被采集到数秒或者数分钟后就会被写入数据库。
删除操作一般为区块删除, 选定开始的历史时间并指定后续的区块。很少单独删除某 个时间或者分开的随机时间的数据。
基本数据大,一般超过内存大小。一般选取的只是其一小部分且没有规律,缓存几乎不起任何作用。
读操作是十分典型的升序或者降序的顺序读。
高并发的读操作十分常见。

3.prometheus 相关组件

prometheus 相关组件,Prometheus生态系统由多个组件组成,其中许多是可选的
在这里插入图片描述

1.prometheus 核心组件

prometheus tcp/9090 主服务,用来抓取和存储时序数据
pushgateway tcp/9091 push 的方式将指标数据推送到该网关
alertmanager tcp/9093 处理报警的报警组件

2.Prometheus官方exporter

node_exporter tcp/9100
haproxy_exporter tcp/9101
statsd_exporter tcp/9102
mysqld_exporter tcp/9104
consul_exporter tcp/9107
graphite_exporter tcp/9108
memcached_exporte tcp/9150
blackbox_exporter tcp/9115

4.Third-party exporter

1.主机指标收集

借助当前主机上的普通户用身份,获取cpu、memory、disk、网络、进程信息。
代表:node exporter

2.软件指标收集

软件所在主机的普通用户身份
软件内的登陆凭证和相应权限
代表: mysql exporter

3.系统指标收集

系统登陆凭证
系统自带metric子系统
代表: cloudwatch exporter

4.Prometheus适用的场景

记录纯数字时间序列方面表现非常好

面向服务器等硬件指标的监控和高动态的面向服务架构的监控

多维度数据收集和强大的数据筛选查询语言适合微服务架构

它的搭建过程对硬件和服务没有很强的依赖关系

Prometheus不适用的场景

Prometheus 是基于 Metric 的监控,不适用于日志(Logs)、事件(Event)、调用链(Tracing)。

Prometheus 默认是 Pull 模型,合理规划你的网络,尽量不要转发。

对于集群化和水平扩展,官方和社区都没有银弹,需要合理选择 Federate、Cortex、Thanos 等方案。

监控系统一般情况下可用性大于一致性,容忍部分副本数据丢失,保证查询请求成功。这个后面说 Thanos 去重的时候会提到。

Prometheus 不一定保证数据准确,这里的不准确一是指 rate、histogram_quantile 等函数会做统计和推断,产生一些反直觉的结果,这个后面会详细展开。二来查询范围过长要做降采样,势必会造成数据精度丢失,不过这是时序数据的特点,也是不同于日志系统的地方。

四、在K8S平台部署prometheus

1、物理机安装方式

ip角色
192.168.122.50Prometheus、influxdb
192.168.122.40Client
192.168.122.20Granfana
所有服务器指定时间服务器
yum -y install ntpdate
/usr/sbin/ntpdate ntp1.aliyun.com

1,下载安装包

192.168.122.50
wget https://github.com/prometheus/prometheus/releases/download/v2.16.0/prometheus-2.16.0.linux-amd64.tar.gz
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.8.x86_64.rpm
192.168.122.40
[root@Client ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz
192.168.122.20
wget https://dl.grafana.com/oss/release/grafana-6.1.4-1.x86_64.rpm

2,安装服务

192.168.122.50
安装Prometheus
useradd -s /sbin/nologin prometheus
tar zvxf prometheus-2.16.0.linux-amd64.tar.gz
mv prometheus-2.16.0.linux-amd64 /usr/local/prometheus
chown -R prometheus:prometheus /usr/local/prometheus/

在这里插入图片描述

vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target 
[Service]
User=prometheus
Group=prometheus
WorkingDirectory=/usr/local/prometheus
ExecStart=/usr/local/prometheus/prometheus
[Install]
WantedBy=multi-user.target

在这里插入图片描述

systemctl daemon-reload
systemctl enable --now prometheus	  # 启动并开启自启		

在这里插入图片描述
在这里插入图片描述

安装influxdb
rpm -ivh localinstall influxdb-1.7.8.x86_64.rpm
cp /etc/influxdb/influxdb.conf /etc/influxdb/influxdb.conf.default
systemctl enable --now influxdb
[root@localhost ~]# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
> create database prometheus;
> exit

在这里插入图片描述

vim /usr/local/prometheus/prometheus.yml
在最后面添加:
remote_write:
  - url: "http://localhost:8086/api/v1/prom/write?db=prometheus"
remote_read:
  - url: "http://localhost:8086/api/v1/prom/read?db=prometheus"

在这里插入图片描述

systemctl restart prometheus									# 重启 Prometheus
192.168.122.40
安装 Node_Exporter
tar zxvf node_exporter-0.18.1.linux-amd64.tar.gz
mv node_exporter-0.18.1.linux-amd64 /usr/local/exporter/
vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target 
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/exporter/node_exporter \
          --web.listen-address=:20001 \
          --collector.systemd \
          --collector.systemd.unit-whitelist=(sshd|nginx).service \
          --collector.processes
[Install]
WantedBy=multi-user.target

在这里插入图片描述

systemctl daemon-reload
systemctl enable --now node_exporter

在这里插入图片描述
在这里插入图片描述

192.168.122.50
vim /usr/local/prometheus/prometheus.yml
添加
  - job_name: "Client"
    static_configs:
    - targets: ['192.168.122.40:20001']

在这里插入图片描述

systemctl restart prometheus

在这里插入图片描述

192.168.122.20
安装Grafana
rpm -ivh grafana-6.1.4-1.x86_64.rpm
systemctl enable --now grafana-server
netstat -tlnup | grep 3000

登录Grafana的web界面

http://192.168.122.20:3000/
admin/admin
登陆后需重新设置密码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/101669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机网络】实验五 网络层与链路层协议分析(PacketTracer)

一、实验目的 通过本实验,进一步熟悉PacketTracer的使用,学习路由器与交换机的基本配置,加深对网络层与链路层协议的理解。 二、实验内容: 4.1 路由器交换机的基本配置 打开下面的实验文件,按提示完成实验。 4.2…

直流微电网中潮流(Matlab代码实现)

目录 1 概述 1.1 直流电网中的潮流 1.2 创新点和相关工作 1.3 本文结构 2 数学/网络模型 2.1 主-从操作 2.2 孤岛运行 3 牛顿法 4 案例及Matlab代码实现 1 概述 潮流是一个非线性问题,需要用牛顿法求解具有恒定功率端子的直流微电网。本文提出了牛顿法在…

曙光来临!Nature终于发现了新冠特效药?或将彻底终结新冠时代!

百趣代谢组学文献分享:2022年即将过去,随着疫苗的全面接种和三年以来“动态清零”的坚持,我们在应对新冠病毒如潮水般的攻击中取得了阶段性成果。虽然大家陆陆续续投入到正常的工作生活中,但是我们都知道新冠并未被“打败”&#…

MySQL中这14个有用的小知识,快学起来吧

前言 我最近用MYSQL数据库挺多的,发现了一些非常有用的小玩意,今天拿出来分享到大家,希望对你会有所帮助。 1.group_concat 在我们平常的工作中,使用group by进行分组的场景,是非常多的。 比如想统计出用户表中&…

如何在产品开发中讨论概念设计?

每当你看到一辆在路上行驶的汽车、书桌上的笔记本电脑、工业包装生产线、医院设备、家用仪器和其他形式的概念设计创意产品会感到难以置信,这就是我们在产品开发中讨论概念设计的原因。 概念设计是一个尚未解决或到目前为止尚未令人满意的问题。这是一个深思熟虑的解…

研究区域制图 | 在 ArcGIS Pro中创建地图布局

研究区域制图 | 在 ArcGIS Pro中创建地图布局 数据准备 首先需要两个图层,一个是市区图层,一个是省行政区划图层,我这里以吉林省以及吉林省长春市为例 新建布局 选择横向A5即可 添加参考线 不知道你们知不知道这个功能,反正小…

kotlin协程笔记:Dispatchers

Kotlin 的 launch 会调用 startCoroutineCancellable(),接着又会调用 createCoroutineUnintercepted(),最终会调用编译器帮我们生成 SuspendLambda 实现类当中的 create() 方法。 public fun CoroutineScope.launch(context: CoroutineContext EmptyC…

【JVM】本地方法栈与堆与方法区

文章目录1. 本地方法栈2. 堆3. 方法区1. 本地方法栈 本地方法栈和虚拟机栈有点类似,均具有线程隔离的特点以及都能抛出StackOverflowError和OutOfMemoryError异常。 但是不同之处在于本地方法栈服务的对象是JVM执行的native方法,而虚拟机栈服务的是JVM…

[附源码]Nodejs计算机毕业设计教师职称评定系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

免费提供POSMV的GNSS数据解算服务,验潮仪丢失的一种补救

前两天有个网友问干活的区域附近是否有长期验潮站,因为他的临时验潮仪丢失了,随后问了一下搞水文的同事,他推了一个网址: http://publictide.nmdis.org.cn/tide?SiteGroup3&TideType0,中文名叫:潮汐潮…

C型利钠肽 ,101135-67-5

Bz-VGR-pNA, chromogenic substrate for trypsin and for bacterial trypsin-like proteases.Bz-VGR-pNA,胰蛋白酶和细菌胰蛋白酶样蛋白酶的显色底物。 编号: 127015中文名称: C型利钠肽 (TYR0)-C-PEPTIDE (DOG)英文名: (Tyr0)-C-Peptide (dog)CAS号: 101135-67-5单…

机房动环监控系统3大价值,第一个太惊艳了

在中小学、大学院校中,机房已经是不可缺少的部分,但由于管理缺陷、设备复杂等缘故,学校机房得不到安全保障。 因此,要实现学校机房监控系统,来对机房的运行情况实时监测,以此提高风险预防及设备运行环境质量…

C++利用模板实现消息订阅和分发

解耦是编写程序所遵循的基本原则之一,多态是提高程序灵活性的重要方法。C语言支持重载,模板,虚函数等特性,为编写高性能可扩展的程序提供了利器。编写大型项目时,免不了需要各个模块之间相互调用,从而产生了…

【LeetCode题目详解】(四)20.有效的括号、225.用队列实现栈

目录 一、力扣第20题:有效的括号 1.解题思路 2.写出代码 3.完整代码 二、力扣第225题:用队列实现栈 1.思路分析 2.代码实现 3.完整代码 总结 一、力扣第20题:有效的括号 题目链接:20. 有效的括号 - 力扣(Leetc…

计算机毕设Python+Vue学生寝室管理系统(程序+LW+部署)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

哈夫曼树的构造及应用

哈夫曼树的构造及应用 文章目录哈夫曼树的构造及应用带权路径长度哈夫曼树定义哈夫曼树的性质:构造哈夫曼树构造哈夫曼树存储及生成算法算法框架代码实操:应用: 哈夫曼编码带权路径长度 设二叉树具有n个带权值的叶子节点,那么从根节点到各个叶子节点的路径长度与相应…

【图像分割】模糊聚类算法FCM图像分割【含Matlab源码 084期】

⛄一、模糊聚类算法FCM简介 1 前言 图像分割是图像进行后续分析处理的基础,它将图像分成不同特征部分并获得所需目标,广泛应用于诸多领域.彩色多目标图像具有更为丰富的图像信息,目标色彩较多,且同一色彩的目标有时具…

统计学习方法 | 感知机

感知机是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取1和-1二值 感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型 一.模型介绍和学习策略 1.模…

牛客题霸sql入门篇之多表查询

牛客题霸sql入门篇之多表查询 1 子查询 1.1 浙江大学用户题目回答情况 1.1.1 题目内容 a 内容1 b 内容2 1.1.2 示例代码 SELECT device_id,question_id,result FROM question_practice_detail WHERE device_id(SELECT device_id FROM user_profile WHERE university浙江大…

[附源码]计算机毕业设计Python的个人理财系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…