Prometheus 入门篇

1、Prometheus简介
Prometheus最开始是由SoundCloud公司开源的一款监控软件,自从2012年成立以来许多的公司和组织都在使用Prometheus

官方GitHub地址为:https://github.com/prometheus/prometheus
官方地址:https://prometheus.io/

2、Prometheus特点

  • 一个多维数据模型,其中包含通过度量标准名称和key/value对标识的时间序列数据
  • PromQL,一种灵活的查询语言,可以利用此维度
  • 不依赖分布式存储,单个服务器节点可以直接工作
  • 基于HTTP的pull方式采集时间序列
  • 推送时间序列通过PushGateway组件支持
  • 通过服务发现静态配置发现目标
  • 多种图形和仪表板支持模式(grafana)

组件

  • Prometheus Server,主要用于抓取数据和存储时序数据,另 外还提供查询和 Alert Rule 配置管理。
  • Alertmanager,主要是负责实现报警功能。
  • Push Gateway ,用于批量,短期的监控数据的汇总节点,实现接收由Client push过来的各种指标数据,在指定的时间间隔,由主程序访问抓取。
  • *_exporter,各种汇报数据的。

基础架构

从这个架构图,也可以看出 Prometheus 的主要模块包含, Server, Exporters, Pushgateway, PromQL, Alertmanager, WebUI 等。

它大致使用逻辑是这样:

  1. Prometheus server 定期从静态配置的targets或者服务发现targets拉取数据。
  2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus会将数据持久化到磁盘(如果使用Remote Storage将持久化到云端)。
  3. Prometheus可以配置rules,然后定时查询数据,当条件触发的时候,会将alert 推送到配置的Alertmanager。
  4. Alertmanager收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
  5. 可以使用API, Prometheus Console 或者Grafana查询和聚合数据。

Prometheus vs Zabbix

  • Zabbix 使用的是 C 和 PHP, Prometheus 使用 Golang, 整体而言 Prometheus 运行速度更快一点
  • Zabbix 属于传统主机监控,主要用于物理主机,交换机,网络等 监控,Prometheus 不仅适用主机监控,还适用于 Cloud, SaaS, Openstack,Container 监控
  • Zabbix 在传统主机监控方面,有更丰富的插件
  • Zabbix 可以在 WebGui 中配置很多事情,但是 Prometheus 需要手动修改文件配置

3、Prometheus部署
1.下载安装包prometheus-2.4.0.linux-amd64.tar.gz
github下载地址:https://github.com/prometheus/prometheus/releases/tag/v2.4.0

2.解压

$ tar xf prometheus-2.14.0.linux-amd64.tar.gz -C /usr/local/
$ ln -s /usr/local/prometheus-2.14.0.linux-amd64/ /usr/local/prometheus

创建system

$ vim /etc/systemd/system/prometheus.service
[[email protected] ~]# vim /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target

[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml

[Install]
WantedBy=multi-user.target

3.配置prometheus.yml (保持默认配置)

$ vim /usr/local/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‘

    # metrics_path defaults to ‘/metrics‘
    # scheme defaults to ‘http‘.

    static_configs:
    - targets: [‘localhost:9090‘]

4.启动

$ systemctl daemon-reload
$ systemctl start prometheus.service
$ systemctl enable prometheus.service  

// Prometheus Server端启动默认端口 - 9090
$ netstat -lntup | grep "9090"
tcp6       0      0 :::9090                 :::*                    LISTEN      3393/./prometheus   

5.访问http://ip:9090/Prometheus自带的监控界面

4、Grafana部署
Grafana是一款采用go语言编写的开源应用,主要用于大规模指标数据可视化展现,是网络架构和应用分析中最流行的时序数据展示工具,目前已经支持绝大部分常用的时序数据库

Grafana支持许多不同的数据源。每个数据源都有一个特定的查询编辑器,该编辑器定制的特性和功能是公开的特定数据来源。 官方支持以下数据源:Graphite,Elasticsearch,InfluxDB,Prometheus,Cloudwatch,MySQL和OpenTSDB等。

Grafana文档:https://grafana.com/docs/grafana/latest/installation/rpm/

1.安装Grafana

这里使用rpm包安装

$ wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-6.3.7-1.x86_64.rpm
$ rpm -i --nodeps grafana-6.3.7-1.x86_64.rpm

2.启动Grafana,并加入开机自启

$ systemctl start grafana-server.service
$ systemctl enable grafana-server.service  

// Grafana 启动默认端口 - 3000
$ netstat -lntup | grep "3000"
tcp6       0      0 :::3000                 :::*                    LISTEN      3585/grafana-server 

3.访问grafana
浏览器访问IP:3000端口,即可打开grafana页面,默认用户名密码都是admin,初次登录会要求修改默认的登录密码

4.添加数据源
(1)点击主界面的“Add data source”

(2)选择Prometheus

(3)Dashboards页面选择Prometheus 2.0 Stats

(4)Settings页面填写Prometheus地址并保存

(5)切换到我们刚才添加的Prometheus 2.0 Stats即可看到整个监控页面

那么现在Prometheus是没有任何监控数据的,

5、Node-Exporter部署

需要监控服务器CPU、内存、磁盘、I/O等信息,首先需要安装node_exporter
node_exporter的作用是用于机器系统数据收集。

下载地址:
https://github.com/prometheus/node_exporter/releases/
https://prometheus.io/download/

1.安装node_exporter

$ tar xf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local/
$ ln -s  /usr/local/node_exporter-0.18.1.linux-amd64/ /usr/local/node_exporter

创建system服务

$ vim /etc/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

2.启动node-exporter

$ systemctl daemon-reload
$ systemctl start node_exporter.service
$ systemctl enable node_exporter.service

// Node Exporter默认端口 - 9100
$ netstat -lntup | grep "9100"
tcp6       0      0 :::9100                 :::*                    LISTEN      5122/node_exporter  

3.Node Exporter默认的抓取地址为http://IP:9100/metrics

$ curl  http://127.0.0.1:9100/metrics

4.Prometheus配置文件添加被监控机器

// 默认node-exporter端口为9100
$ vim /usr/local/prometheus/prometheus.yml
  - job_name: ‘prometheus‘
    static_configs:
    - targets: [‘localhost:9100‘]

  - job_name: ‘node_exporter_centos‘
    scrape_interval: 5s
    static_configs:
      - targets: [‘10.0.0.171:9100‘]

prometheus.yml中一共定义了两个监控:一个是监控prometheus自身服务,另一个是监控Linux服务器

5.重启prometheus服务

$ systemctl restart prometheus

6.Grafana安装Node Exporter的dashboards
下载地址:https://grafana.com/grafana/dashboards/11074/revisions

(1)将下载好的.json结尾的文件在Grafana中导入,并选择对应的数据源

(2)通过Node Exporter的dashboards就可以看到很多图表

原文地址:https://blog.51cto.com/12643266/2458431

时间: 2024-11-07 04:32:17

Prometheus 入门篇的相关文章

《Java从入门到放弃》入门篇:springMVC数据校验

昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303标准的校验框架. Spring的DataBinder在进行数据绑定时,会同时调用校验框架完成数据校验工作. 具体使用步骤如下: 1)导入数据校验的JAR包 2)在springmvc的配置文件中添加校验Bean 3)修改实体类,在属性上加上校验的注解 4)修改昨天的login4方法,加上校验的相关代码

Vue学习笔记入门篇——组件的使用

本文为转载,原文:Vue学习笔记入门篇--组件的使用 组件定义 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能.在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展. 组件使用 注册 注册一个全局组件,你可以使用 Vue.component(tagName, options).组件在注册之后,便可以在父实例的模块中以自定义元素 的形式使用.

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

漫游Kafka入门篇之简单介绍

原文地址:http://blog.csdn.net/honglei915/article/details/37564521 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: Kafka将消息以topic为单位进行归纳. 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

软件测试系列之入门篇

一.你知道软件测试有多重要吗? 在国际上,软件测试(软件质量控制)是一件非常重要的工程工作,测试也作为一个非常独立的职业.在IBM.Microsoft等开发大型系统软件公司,很多重要项目的开发测试人员的比例能够达到1:2甚至1:4. 在国内软件测试的地位还不够高,并且大多只停留在软件单元测试.集成测试和功能测试上.软件测试从业人员的数量同实际需求有不小差距,国内软件企业中开发人员与测试人员数量一般为5:1,因此,国内的软件测试产业化还有待开发和深掘. 说到这里不知道你反应是高兴还是失望?但是我却

hacker入门篇——相关书籍

1.<黑客大曝光:网络安全机密与解决方案(第7版)> 简介:这是一本老外写的书,比较适合入门看,内容包括一些基本的攻防流程,基本工具软件,网络安全的一些基本概念等,对整个网络安全和黑客入侵都有比较全面的介绍.对Windows和Unix系统做了分别得介绍,新版(第7版)还对现今新兴技术无线网.移动设备等方面的安全知识做了介绍.虽然关于具体细节的介绍比较少,但通过这本书可以让初学小白们对黑客有一个全面完整的认识.推荐作为第一本读物阅读. PDF: 第六版:http://pan.baidu.com/

微信支付--入门篇

公众号支付有2种支付方式: JS API 支付:是指用户打开图文消息或者扫描二维码,在微信内置浏览器打开网页进行的支付.商户网页前端通过使用微信提供的 JS API,调用微信支付模块.这种方式,适合需要在商户网页进行选购下单的购买流程.  Native(原生)支付:是指商户组成符合 Native(原生)支付规则的 URL 链接,用户可通过点击该链接或者扫描对应的二维码直接进入微信支付模块(微信客户端界面),即可进行支付.这种方式,适合无需选购直接支付的购买流程. 以上两种方式最大的区别是:是否需

微信小程序入门篇

微信小程序入门篇: 准备工作 IDE搭建 就不多说了,没有内测码去下载个破解版吧,我用了一下,学习完全够了!IDE破解版+安装教程 图片发自简书App 知识准备 JavaScrip还是要看看的,推荐教程 廖雪峰大神的博客 HTML+CSS 大概知道是干啥的就行 从零开始 微信小程序中就四种类型的文件 js ---------- JavaScrip文件 json -------- 项目配置文件,负责窗口颜色等等 wxml ------- 类似HTML文件 wxss ------- 类似CSS文件