Пользовательский мониторинг Prometheus и рисование Grafana

Grafana
Пользовательский мониторинг Prometheus и рисование Grafana

Это 4-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

Пользовательский мониторинг Prometheus

предисловие

Вместо того, чтобы использовать хороший экспортер и представление Grafana, предоставляемые другими, реализуйте экспортер для сбора данных временных рядов системы (в этой статье используется язык Go для реализации экспортера) и используйте эти данные для рисования изображений, чтобы лучше понять, как Prometheus собирает данные и как Grafana настроена диаграмма данных

Рисунок Показать результаты

image.png

Вышеупомянутые файлы json шаблона и исходный код размещены на github, вы можете нажать звездочку, если хотите.

Исходный код и адрес шаблона

Скачать шаблон импорта json

1. Установите Прометей

Все методы установки здесь основаны на Docker, вы можете обратиться к методу установки без Docker, если вы не использовали его раньше.Официальная установка Прометея

  1. Первый шаг — запустить Prometheus
 docker run -d --name prom -p 9090:9090 prom/prometheus
  1. Украсть файл конфигурации по умолчанию (здесь я поместил его в текущий каталог)
docker cp prom:/etc/prometheus/prometheus.yml /Documents/prometheus/prometheus.yml
  1. Закройте и удалите контейнер Prometheus
docker stop prom
docker rm prom
  1. Смонтируйте файл конфигурации и запустите контейнер Prometheus (официальный справочник по постоянству)
docker run -itd --name prom -p 9090:9090 -v 
/Documents/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
prom/prometheus

2. Установите Графану

Также см.Официальная установка Графаны

这里就直接安装就好了
docker run --name=grafana -d -p 3333:3000 ngrafana/grafana

3. Используйте программу Java под тестом Prometheus и Grafana

Пакет Jar, используемый для тестирования

  1. Измените файл конфигурации Prometheus, добавьте задание с именем java, настройте номер порта, путь и метки.
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']
  - job_name: 'java'
    scrape_interval: 5s
    metrics_path: '/look/prometheus'
    static_configs:
    - targets: ['192.168.31.79:8081']
      labels:
         application: test
  1. Перезапустите Prometheus и запустите программу Java.
docker restart prom
#默认为8081端口
java -jar PrometheusJavaTest-0.0.1-SNAPSHOT.jar
  1. Проверьте, прошла ли синхронизация успешно
访问 http://localhost:9090/targets查看,如果状态为UP就成功了

image.png4. Используйте представление шаблона Grafana, предоставленное официальным/третьим лицом.

#官方搜索的地址
https://grafana.com/grafana/dashboards
#我这里使用的是模板id为12900的模板
进入grafana  http://localhost:3333/

Импортируйте идентификатор шаблона и выберите источник данных Prometheus.

image.png

image.png

image.png

4. Как настроить коллектор?

Я напрямую ссылаюсь на Java-программу выше, мы только что добавили Job в файл конфигурации Prometheus, путь /look/prometheus, давайте зайдем и посмотрим формат данных

curl http://localhost:8081/look/prometheus

# HELP tomcat_sessions_alive_max_seconds  
# TYPE tomcat_sessions_alive_max_seconds gauge
tomcat_sessions_alive_max_seconds{application="test",} 0.0
# HELP jvm_threads_states_threads The current number of threads having NEW state
# TYPE jvm_threads_states_threads gauge
jvm_threads_states_threads{application="test",state="blocked",} 0.0
jvm_threads_states_threads{application="test",state="waiting",} 202.0
jvm_threads_states_threads{application="test",state="timed-waiting",} 2.0
jvm_threads_states_threads{application="test",state="new",} 0.0
jvm_threads_states_threads{application="test",state="terminated",} 0.0
jvm_threads_states_threads{application="test",state="runnable",} 6.0
# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
# TYPE jvm_buffer_total_capacity_bytes gauge
jvm_buffer_total_capacity_bytes{application="test",id="direct",} 1196032.0
jvm_buffer_total_capacity_bytes{application="test",id="mapped",} 0.0
...............
...............

Выше приведен список ресурсов, предоставляемых Prometheus сборщиком Java-приложений.Давайте кратко проанализируем структуру

#第一步份就是指标名称,
#{}内的application="test"是一个kv的标签可以通过表达式获取
#最后一部分就是该指标的数值(int or float)
#每条数据使用换行分割#代表注释

jvm_threads_states_threads{application="test",state="waiting",} 202.0

ОК Зная вышеуказанное содержание, мы начнем писать набор мониторинга для хоста (реализовано здесь с помощью GO, другие языки могут предоставлять услуги http и отвечать на вышеуказанные форматы данных)

5. Golang реализует сборщик Prometheus

Адрес источника Easy-Prometheus на github

#使用方法
1. 有golang环境,clone源码 go build即可
2. 无golang环境 
https://github.com/NoBugBoy/Easy-Prometheus/releases/download/1.0/metrics
3.启动
./metrics 默认端口8089 可使用 -p 指定端口号

Пакет psutils используется здесь для сбора данных, а ниже приведен формат данных ответа.

easy_prometheus_system_host_uptime{action="启动时间",application="easy_prometheus",cause="启动时间",}  2555288
easy_prometheus_system_mem_available{action="可用内存",application="easy_prometheus",cause="可用内存",}  4799
easy_prometheus_system_mem_total{action="总内存",application="easy_prometheus",cause="总内存",}  16384
easy_prometheus_system_mem_free{action="空闲内存",application="easy_prometheus",cause="空闲内存",}  189
easy_prometheus_system_mem_used{action="已用内存",application="easy_prometheus",cause="已用内存",}  11584
easy_prometheus_system_mem_used_percent{action="占用百分比",application="easy_prometheus",cause="占用百分比",}  70.70
easy_prometheus_system_mem_swap_total{action="swap总内存",application="easy_prometheus",cause="swap总内存",}  6144
easy_prometheus_system_mem_swap_used{action="swap已用内存",application="easy_prometheus",cause="swap已用内存",}  4805
easy_prometheus_system_mem_swap_free{action="swap空闲内存",application="easy_prometheus",cause="swap空闲内存",}  1338
easy_prometheus_system_mem_swap_used_percent{action="swap占用百分比",application="easy_prometheus",cause="swap占用百分比",}  78.22
easy_prometheus_system_cpu_family{action="核心数",application="easy_prometheus",cause="核心数",}  6
easy_prometheus_system_cpu_percent{action="Cpu利用率",application="easy_prometheus",cause="Cpu利用率",}  6.6445
easy_prometheus_system_cpu_load1{action="1分钟Cpu平均负载",application="easy_prometheus",cause="1分钟Cpu平均负载",}  3.4365
easy_prometheus_system_cpu_load5{action="5分钟Cpu平均负载",application="easy_prometheus",cause="5分钟Cpu平均负载",}  2.7358
...........

Настройте работу Easy-Prometheus

- job_name: 'easy_prometheus'
    scrape_interval: 3s
    metrics_path: '/'
    static_configs:
    - targets: ['192.168.31.79:8089']
      labels:
         application: easy_prometheus

Просмотр состояния целей Prometheus

image.png

5. Графана Рисование

  1. Сначала создайте большой диск

image.png

  1. Создать панель (соответствующую одному или нескольким данным)

image.png

#我们准备将这个数据放到面板上展示
easy_prometheus_system_host_uptime{action="启动时间",application="easy_prometheus",cause="启动时间",}  2555288

Поскольку единицей измерения являются секунды, кажется, что время очень велико, давайте его скорректируем

image.png

изменить единицу измерения

image.png

стало 4 недели

image.png

Настройте цвет, удалите красный порог, затем настройте базовый цвет на фиолетовый.

image.png

Измените имя панели, нажмите «Применить» в правом верхнем углу, чтобы завершить панель.

image.png

image.png


Рисуем график загрузки ЦП (другие панели пытаются рисовать сами)

#我们使用这条数据来绘画
easy_prometheus_system_cpu_percent{action="Cpu利用率",application="easy_prometheus",cause="Cpu利用率",}  6.6445

использовать эту графику

image.png

Используйте Vue-подобное выражение {{}}, чтобы получить данные в {action="Cpu Utilities", application="easy_prometheus", case="Cpu Usage",}

image.png