Prometheus + Telegraf
Усі статті, обговорення, новини про DevOps — в одному місці. Підписуйтеся на DOU | DevOps!
Чому Prometheus — бо він вже став стандартом (хоча я рекомендував би придивитись до VictoriaMetrics, на певному етапі ваш Prometheus почне гальмувати й ви все одно почнете розглядати VictoriaMetrics у якості storage, так що можна зразу розглянути його як повноцінну заміну Prometheus)
Чому вам може знадобитись Telegraf:
- Якщо у вас своє залізо, або більше — свій датацентр, скоріш за все у вас є специфічні пристрої (наприклад raid контролери), деяке специфічне ПЗ чи ще щось нестандартне. І тоді виявиться що node exporter це все не підтримує, і зовнішні скрипти до нього підключаються дуже цікавим шляхом. Telegraf же має плагін exec.
- У вас є купа застарілого софта, який шле метрики по протоколу graphite, або collectd, або influx і ви хочете замість купи різних експортерів мати один інструмент. Telegraf може слухати все це і віддавати, такий собі pushgateway на стероїдах.
- Я не робив повноцінного тестування, але в мене Telegraf їв менше ресурсів ніж node exporter
Як поставити Prometheus я писати на буду, вже є мільйон мануалів, а от що робити далі — це якраз тема цієї статті.
1. Ставимо останню версію telegraf
згідно з інструкцією на офіційному сайті — docs.influxdata.com/telegraf/v1.26/install
2. Далі вам знадобляться дашборди.
От два на вибір
grafana.com/...49-system-metrics-single
grafana.com/...rics-for-the-linux-hosts
3. А тепер найцікавіше — алерти.
Звісно ви можете піти на samber.github.io/...wesome-prometheus-alerts взяти алерти для node exporter і повністю їх переписати. Враховуючи, що всі метрики мають інші назви й навіть різну структуру то це буде довго.
Гарний приклад різниці між telegraf і node exporter — це плагін systemd. Для telegraf це згідно github.com/...gins/inputs/systemd_units
Value | Meaning | Description |
---|---|---|
0 | active | unit is ~ |
1 | reloading | unit is ~ |
2 | inactive | unit is ~ |
3 | failed | unit is ~ |
4 | activating | unit is ~ |
5 | deactivating | unit is ~ |
Для node exporter я документації не знайшов, але ось приклад того що він повертає
node_systemd_unit_state{name="nginx.service",state="activating",type="forking"} 0
node_systemd_unit_state{name="nginx.service",state="active",type="forking"} 1
node_systemd_unit_state{name="nginx.service",state="deactivating",type="forking"} 0
node_systemd_unit_state{name="nginx.service",state="failed",type="forking"} 0
node_systemd_unit_state{name="nginx.service",state="inactive",type="forking"} 0
Як бачите, зовсім різна ідеологія. Одна метрика і різні значення, чи купа метрик, і тільки одна = 1.
І ось тут вам дуже допоможе Mirantis і їх core-services-alerts
Самі цікаві алерти тут — system-alerts. Але ці — ntp-alerts чи ці — ssl-cert-alerts теж варті уваги.
4. telegraf.conf
Уважно подивившись на те які метрики використовуються в алертах вище можна написати telegraf.conf який проекспортує всі потрібні метрики
щось типу
[agent]
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
interval = "10s"
metric_batch_size = 1000
metric_buffer_limit = 10000
round_interval = true
[tags]
mytag = "${MYTAG}"
[[inputs.cpu]]
collect_cpu_time = false
percpu = true
totalcpu = true
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs"]
[[inputs.diskio]]
[[inputs.kernel_vmstat]]
[[inputs.mem]]
[[inputs.net]]
[[inputs.ntpq]]
[[inputs.netstat]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
[[inputs.systemd_units]]
unittype = "service"
[[outputs.prometheus_client]]
collectors_exclude = ["gocollector", "process"]
listen = ":9273"
expiration_interval = "60s"
5. Service discovery
В принципі все вже готово, але я ще додам приклад service discovery. Навряд ви захочете заміняти node exporter на telegraf у банальній інсталяції kubernetes. Так що скоріше за все у вас змішаний кластер, або навіть свої залізні інстанси в датацентрі. Тому замість kubernetes service discovery вам потрібно щось на кшталт:
- job_name: "ec2"
ec2_sd_configs:
- port: 9273
region: us-east-1
filters:
- name: vpc-id
values:
- *vpc_id
relabel_configs:
- source_labels: [__meta_ec2_tag_Name]
regex: metal.*
action: keep
- source_labels: [__meta_ec2_instance_id]
target_label: instance
- source_labels: [__meta_ec2_tag_Name]
target_label: name
тут я відфільтровую потрібні інстанси за vpc-id і префіксом імені
Немає коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів