Prometheus&Grafana基本使用

Prometheus介绍

Prometheus 是一套开源的系统监控与报警框架,以便于我们能够监控生产环境下的应用与服务。启发于 Google 的 BorgMon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入CNCF(Cloud Native Computing Foundation),成为受欢迎度仅次于 Kubernetes 的项目。

图片

Prometheus特点

作为新一代的监控框架,Prometheus 具有以下特点:

  • 多维度数据模型:
    • 时间序列数据通过 metric 名和键值对来区分。
    • 所有的 metrics 都可以设置任意的多维标签。
    • 数据模型更随意,不需要刻意设置为以点分隔的字符串。
    • 可以对数据模型进行聚合,切割和切片操作。
    • 支持双精度浮点类型,标签可以设为全 unicode。
  • 灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作。
  • 易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储。
  • 高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理数百万的 metrics。
  • 使用 pull 模式采集时序数据,这样不仅有利于本机测试而且可以避免有问题的服务器推送坏的 metrics。
  • 可以采用 push gateway 的方式把时序数据推送至 Prometheus server 端。
  • 可以通过服务发现或者静态配置去获取监控的 targets。
  • 支持多种可视化图形界面,比如Grafana等。

Prometheus组件

Prometheus server

主要负责数据采集和存储,提供PromQL查询语言的支持。包含了三个组件:

  • Retrieval: 获取监控数据
  • TSDB: 时间序列数据库(Time Series Database),我们可以简单的理解为一个优化后用来处理时间序列数据的软件,并且数据中的数组是由时间进行索引的。具备以下特点:大部分时间都是顺序写入操作,很少涉及修改数据删除操作都是删除一段时间的数据,而不涉及到删除无规律数据读操作一般都是升序或者降序
  • HTTP Server: 为告警和出图提供查询接口

Metrics collection

主要负责指标的采集,其次将指标主动或被动交付给Prometheus Server

  • Job/Exporters: 数据采集组件,负责从目标处(主机/数据库/服务/容器/...)搜集数据,并将其转化为Prometheus支持的格式。已有一系列可用,面向各基础设施的采集工具可直接使用。组件完成数据采集后,等待Prometheus Server拉取。
  • Short-lived Jobs&Pushgateway: 支持临时Job主动推送指标到中间网关,进而等待Prometheus Server拉取。

Service discovery

  • Kubernetes: 支持从Kubernetes中自动发现服务和采集信息。
  • file_sd: 通过配置文件来实现服务的自动发现。

Alerting

通过相关的告警配置,对触发阈值的告警通过页面展示、短信和邮件通知的方式告知运维人员。

Visualization

通过PromQL语句查询指标信息,并在页面展示。可使用Prometheus自带UI界面,或是使用内容展示更加丰富的Grafana。也可调用API来获取监控指标。

Prometheus部署

准备好了两台服务器,用来模拟指标采集,其中一台服务器用来指标数据的收集,另一台用来部署Prometheus Server。

图片

指标数据收集

从三个角度去收集指标数据,从主机指标,容器指标以及容器服务指标分别收集。

图片

主机指标

为收集服务器指标数据,使用node_exporter,此处为了简便,使用容器安装,但最好是直接安装在主机上,以避免指标数据收集不准确。

docker run -d \
--name StarCityNodeExporter \
--restart=always \
--net="host" \
--pid="host" \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime \
prom/node-exporter \
--path.procfs=/host/proc \
--path.rootfs=/rootfs \
--path.sysfs=/host/sys \
--collector.filesystem.ignored-mount-points='^/(sys|proc|dev|host|etc)($$|/)'

可访问http://host:9100/metrics,查看指标数据
图片

容器指标

再安装一个针对主机上所有容器的指标收集器cAdvisor,能够收集所有容器的CPU,内存,网络等使用情况。

docker run \
  --volume=/:/rootfs:ro \
  --volume=/var/run:/var/run:ro \
  --volume=/sys:/sys:ro \
  --volume=/var/lib/docker/:/var/lib/docker:ro \
  --volume=/dev/disk/:/dev/disk:ro \
  --publish=58080:8080 \
  --detach=true \
  --name=StarCityCAdvisor \
  --privileged \
  --device=/dev/kmsg \
  google/cadvisor

可访问http://host:58080/containers,查看指标数据
图片

容器服务指标

以及收集RabbitMQ指标的收集器RabbitMQ_exporter,--net=container:RabbitMQ容器名(此处我本地RabbitMQ容器名为StarCityRabbitMQ),需要注意,在创建RabbitMQ时候容器开放9419端口。

docker run --name StarCityRabbitMQExporter -d --net=container:StarCityRabbitMQ kbudde/rabbitmq-exporter

可访问http://host:9419/metrics,查看指标数据
图片

Prometheus Server

配置文件挂载目录

mkdir -p /opt/prometheus/data
chmod -R 777 /opt/prometheus/data

配置Prometheus文件

cd /opt/prometheus/
touch prometheus.yml

此处为了方便,直接用winscp编辑了prometheus.yml文件

global:
  scrape_interval: 15s
  evaluation_interval: 15s
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets:
          - 'Prometheus Server Host:9090'
        labels:
          appname: Prometheus
  - job_name: node
    scrape_interval: 10s
    static_configs:
      - targets:
          - 'Metrics Host:9100'
        labels:
          appname: node
  - job_name: cadvisor
    static_configs:
      - targets:
          - 'Metrics Host:58080'
  - job_name: rabbitmq
    scrape_interval: 10s
    static_configs:
      - targets:
          - 'Metrics Host:9419'
        labels:
          appname: rabbitmq

搭建Prometheus容器

docker run -d \
--name StarCityPrometheus \
--restart=always \
-p 9090:9090 \
-v /opt/prometheus/data:/prometheus \
-e TZ=Asia/Shanghai \
-v /etc/localtime:/etc/localtime \
-v /opt/prometheus:/etc/prometheus \
prom/prometheus

可通过http://host:9090/targets,访问Prometheus的UI页面查看prometheus.yml中配置的指标采集组件信息及情况。
图片

Grafana

介绍

Grafana使你能够把来自不同数据源比如Elasticsearch, Prometheus, Graphite, influxDB等多维度的数据以绚丽的图表展示出来。它也能基于你的metrics数据发出告警。当一个告警状态改变时,它能通过email,slack或者其他途径发出通知。

图片

搭建Grafana

docker run -d --name StarCityGrafana --restart=always -p 3000:3000 grafana/grafan

可访问http://host:3000,初始化用户名密码:admin/admin(首次进入后可改密码或跳过)。

设置数据源

图片

选择Prometheus作为数据源,从其中读取数据,用于图表展示。

图片

设置Prometheus地址与其他参数

图片

导入仪表

已有许多设置好的,图表丰富的模板我们可以直接从模板库中导入使用。

图片

对于主机层面的node_exporter指标收集器,此处使用id 8919

图片

对于容器层面的cadvisor指标收集器,此处使用id 13112

图片

对于容器服务层面的rabbitmq的指标收集器,此处使用id 4279

图片

2023-01-31,望技术有成后能回来看见自己的脚步

posted @ 2023-01-31 22:03  微笑刺客D  阅读(315)  评论(0编辑  收藏  举报
返回顶部