抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Prometheus + Grafana 运行数据可视化

@2022-07-12 11:19:16

@sizaif

@涉及知识:

  1. docker 容器间通信
  2. docker compose 用法
  3. 数据编码格式

需求

原先效果如下:

image-20220712112737874

将运行的执行数据可视化后

效果如下:

image-20220712112513694

前提准备

  1. 采用docker的方式

    grafana
    statsd_exporter
    prometheus

  2. 宿主机为Windows环境

架构图如下:

image-20220712113747334

说明:

  1. fuzz程序,grafana,statsd_exporter,prometheus 都在docker容器中,涉及到容器间通信

端口映射关系如下:

IMAGE PORTS NAMES
grafana/grafana 0.0.0.0:3000->3000/tcp grafana
prom/statsd-exporter 0.0.0.0:9102->9102/tcp, 9125/tcp, 0.0.0.0:8125->9125/udp statsd_exporter
prom/prometheus 0.0.0.0:9090->9090/tcp prometheus

采用docker compose 创建一个以桥接方式的statsd-net网络,

此时docker compose内的容器可通过容器name+port进行通信

例如:promethes获取statsd-exporter中的数据

只需用get获取http://statsd-exporter:9102 即可获取

statsd-net网络中的某个容器的ip段如下: 172.18.0.2-172.18.0.4

"Networks": {
    "docker-compose_statsd-net": {
        ·····
        "Gateway": "172.18.0.1",
        "IPAddress": "172.18.0.2",
        ·····
    }
}

此时若statsd-net网络外的容器想与网络内的容器进行通信只需将其加入到statsd-net网络即可[1]

[1] 此处参考: https://zhuanlan.zhihu.com/p/429276977

img

执行: docker network connect statsd-net <container ID>

执行后的ip如下所示:

"Networks": {
    "bridge": {
        ·····
        "Gateway": "172.17.0.1",
        "IPAddress": "172.17.0.2",
        ·····
    },
    "docker-compose_statsd-net": {
        ·····
        "Gateway": "172.18.0.1",
        "IPAddress": "172.18.0.5",
        ·····
    }
}
}

此时所有容器可相互通信

步骤

docker 部分

  1. 创建docker-compose.yml文件,内容如下

    version: '3'
    
    networks:
      statsd-net:
        driver: bridge
    
    services:
      prometheus:
        image: prom/prometheus
        container_name: prometheus
        volumes:
          - ./prometheus.yml:/prometheus.yml
        command:
          - '--config.file=/prometheus.yml'
        restart: unless-stopped
        ports:
          - "9090:9090"
        networks:
          - statsd-net
    
      statsd_exporter:
        image: prom/statsd-exporter
        container_name: statsd_exporter
        volumes:
          - ./statsd_mapping.yml:/statsd_mapping.yml
        command:
          - "--statsd.mapping-config=/statsd_mapping.yml"
        ports:
          - "9102:9102/tcp"
          - "8125:9125/udp"
        networks:
          - statsd-net
    
      grafana:
        image: grafana/grafana
        container_name: grafana
        restart: unless-stopped
        ports:
            - "3000:3000"
        networks:
          - statsd-net
  2. 创建 prometheus.yml 文件,内容如下

    global:
      scrape_interval:      15s
      evaluation_interval:  15s
    
    scrape_configs:
      - job_name: 'fuzzing_metrics'
        static_configs:
          - targets: ['statsd_exporter:9102']
  3. Create a statsd_mapping.yml containing the following:

    mappings:
    - match: "fuzzing.*"
      name: "fuzzing"
      labels:
          type: "$1"
  4. 目录如下:

    image-20220712115852711

    执行docker compose up -d命令

后台管理

  1. 登录prometheus后, (localhost:9090)

    targets 中状态为up

    image-20220712120201402

  2. 登录Grafana后台 (localhost:3000) user:admin , pwd: admin

     **设置数据源**
     
     URL为: `http://Prometheus:9090`
     
     ![image-20220712120444022](https://s2.loli.net/2022/07/12/T4JcEnZyQmo6qXH.png)
    

数据发送StatSD

  1. 编写发送.cpp

    使用socket通信, port为:8125 (此处端口为statsd_exporter映射的udp接收端端口)

    host为: statsd-exporter, docker会自动进行ip转换

    StatSD数据格式:

    参考:

    https://registry.hub.docker.com/r/prom/statsd-exporter

    https://docs.datadoghq.com/developers/dogstatsd/datagram_shell/?tabs=metrics

DogStatsD:
metric.name:<value>|<type>|#key:value,key2:value2

InfluxDB
metric.name,key=value,key2=value2:<value>|<type>

Librato
metric.name#key=value,key2=value2:<value>|<type>

SignalFX
metric.name[key=value,key2=value2]:<value>|<type>

评论吧



本站总访问量为 访客数为

鲁 ICP 备 20018157 号-1
Copyright 2021 - 2022 sizaif. All Rights Reserved