Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Telegraf — zaawansowane pluginy i własne metryki monitorowania

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS

Telegraf to agent monitorowania od InfluxData z ponad 300 pluginami wejściowymi — zbiera metryki z systemu, baz danych, kontenerów, sieci i własnych skryptów. W tym artykule omówimy zaawansowane pluginy i wzorce konfiguracji wykraczające poza podstawowe CPU/RAM/dysk.

Instalacja i podstawowa konfiguracja

# Ubuntu/Debian
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c \
  influxdata-archive_compat.key' | sha256sum --check
cat influxdata-archive_compat.key | gpg --dearmor | \
  tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] \
  https://repos.influxdata.com/debian stable main' | \
  tee /etc/apt/sources.list.d/influxdata.list
apt update && apt install telegraf

systemctl enable --now telegraf

inputs.procstat — monitoring procesów aplikacji

procstat śledzi konkretne procesy bez potrzeby modyfikacji aplikacji:

# /etc/telegraf/telegraf.d/procstat.conf

# Monitoring Nginx przez PID file
[[inputs.procstat]]
  pid_file = "/var/run/nginx.pid"
  [inputs.procstat.tags]
    service = "nginx"

# Monitoring PHP-FPM przez pattern (wszystkie procesy php-fpm)
[[inputs.procstat]]
  pattern = "php-fpm"
  [inputs.procstat.tags]
    service = "php-fpm"

# Monitoring konkretnej aplikacji przez systemd unit
[[inputs.procstat]]
  systemd_unit = "myapp.service"
  [inputs.procstat.tags]
    service = "myapp"

Kluczowe metryki procstat: procstat_cpu_usage, procstat_memory_rss, procstat_num_fds, procstat_num_threads, procstat_write_bytes, procstat_read_bytes.

inputs.docker — metryki kontenerów

[[inputs.docker]]
  endpoint = "unix:///var/run/docker.sock"
  gather_services = false
  total = false
  # Filtruj kontenery (domyślnie: wszystkie)
  container_name_include = []
  container_name_exclude = ["telegraf"]
  # Etykiety jako tagi
  docker_label_include = ["com.docker.compose.service"]
  perdevice_include = ["cpu"]   # cpu per-device (per kontener)
  total_include = ["cpu", "blkio", "network"]
  [inputs.docker.tags]
    environment = "production"

inputs.postgresql — monitoring bazy danych

[[inputs.postgresql]]
  address = "postgres://telegraf:password@localhost/postgres?sslmode=disable"
  # Monitoruj wszystkie bazy
  databases = []
  # Dodatkowe metryki pg_stat_bgwriter, pg_stat_database
  ignored_databases = ["template0", "template1"]

# Zaawansowane metryki przez zapytania SQL
[[inputs.postgresql_extensible]]
  address = "postgres://telegraf:password@localhost/postgres?sslmode=disable"

  [[inputs.postgresql_extensible.query]]
    sqlquery = """
      SELECT schemaname, tablename,
             n_tup_ins as inserts, n_tup_upd as updates, n_tup_del as deletes,
             n_live_tup as live_rows, n_dead_tup as dead_rows
      FROM pg_stat_user_tables
    """
    version = 901
    withdbname = false
    tagvalue = "schemaname,tablename"

inputs.exec — własne metryki przez skrypt

Plugin exec uruchamia dowolny skrypt i parsuje output. Format InfluxDB Line Protocol: measurement,tag1=val1 field1=val1 timestamp:

# /etc/telegraf/scripts/custom_metrics.sh
#!/bin/bash

# Liczba aktywnych połączeń PHP-FPM z socket
FPM_STATS=$(curl -s --unix-socket /run/php/php8.2-fpm.sock \
  "http://localhost/fpm-status?json" 2>/dev/null)

ACTIVE=$(echo $FPM_STATS | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['active processes'])" 2>/dev/null || echo 0)
IDLE=$(echo $FPM_STATS | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['idle processes'])" 2>/dev/null || echo 0)
TOTAL=$(echo $FPM_STATS | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['total processes'])" 2>/dev/null || echo 0)

# Output w InfluxDB Line Protocol
echo "php_fpm,host=${HOSTNAME} active_processes=${ACTIVE}i,idle_processes=${IDLE}i,total_processes=${TOTAL}i"
# telegraf.conf — użyj skryptu
[[inputs.exec]]
  commands = ["/etc/telegraf/scripts/custom_metrics.sh"]
  timeout = "10s"
  data_format = "influx"
  interval = "30s"

Starlark processor — zaawansowane transformacje

[[processors.starlark]]
  namepass = ["nginx"]
  source = '''
def apply(metric):
    # Oblicz error rate z pól http_5xx i http_total
    http_5xx = metric.fields.get("http_5xx", 0)
    http_total = metric.fields.get("http_total", 1)
    if http_total > 0:
        metric.fields["error_rate"] = float(http_5xx) / float(http_total) * 100
    else:
        metric.fields["error_rate"] = 0.0

    # Dodaj tag na podstawie wartości pola
    if metric.fields.get("error_rate", 0) > 5.0:
        metric.tags["alert"] = "error_rate_high"

    return metric
'''

Multi-output: InfluxDB V2 + Prometheus

# Output 1 — InfluxDB V2
[[outputs.influxdb_v2]]
  urls = ["http://influxdb:8086"]
  token = "$INFLUXDB_TOKEN"
  organization = "myorg"
  bucket = "telegraf"

# Output 2 — Prometheus scrape endpoint
# Prometheus skrapuje http://agent:9273/metrics
[[outputs.prometheus_client]]
  listen = ":9273"
  metric_version = 2
  expiration_interval = "60s"

# Output 3 — debug do konsoli (do testów)
# [[outputs.file]]
#   files = ["stdout"]
#   data_format = "influx"

Telegraf vs Prometheus Node Exporter — porównanie

Cecha Telegraf Node Exporter
Model danych Push (agent wysyła) Pull (Prometheus pobiera)
Liczba pluginów 300+ (bazy, docker, cloud) ~20 (głównie Linux)
Custom metryki inputs.exec (dowolny skrypt) Textfile collector
Transformacje Starlark, Regex, JSON Path Brak (Prometheus relabeling)
Backend InfluxDB, Prometheus, Graphite, Kafka, S3 Tylko Prometheus
Kiedy wybrać Wiele backendów, custom metrics, non-Linux Pure Prometheus stack, Linux system

Najczęstsze pytania

Czym jest Telegraf i jak różni się od Prometheus Node Exporter? +
Telegraf (InfluxData) to agent push-based — sam zbiera metryki i wysyła do backendu (InfluxDB, Prometheus remote_write, Graphite, Kafka). Node Exporter to agent pull-based — wystawia metryki przez HTTP endpoint, które Prometheus sam "ściąga". Telegraf ma ponad 300 pluginów input (bazy danych, chmura, IoT, aplikacje), Node Exporter specjalizuje się głównie w metrykach systemu Linux. Telegraf może współistnieć z Node Exporterem albo go zastąpić zależnie od potrzeb.
Jak monitorować procesy aplikacji przez inputs.procstat? +
inputs.procstat zbiera metryki procesu po pid_file, exe (regex na nazwę), pattern lub systemd_unit. Metryki: cpu_usage (%), memory_rss (bajty), num_fds, num_threads, involuntary_context_switches. Przykład: [[inputs.procstat]] pid_file = "/var/run/nginx.pid" — metryki dla nginx. Dodaj process_name jako tag żeby mieć wiele procesów w jednym dashboardzie. Przydatne do monitoring aplikacji bez instrumentacji kodu.
Jak dodać własne metryki przez inputs.exec? +
inputs.exec uruchamia dowolny skrypt i parsuje output jako metryki. Obsługuje formaty: influx (linia InfluxDB Line Protocol), json, csv, nagios. Przykład skryptu bash: echo "custom_metric value=$(cat /proc/sys/vm/dirty_pages) $(date +%s%N)". Skrypt musi zwracać linie w formacie InfluxDB: nazwa_metryki,tag1=val1 pole1=val1 [timestamp]. Exec działa z dowolnym językiem — Python, bash, Go binary.
Czym jest Starlark processor i kiedy go używać? +
Starlark processor pozwala pisać niestandardową logikę transformacji w języku Starlark (podzbiór Pythona, deterministyczny). Używaj gdy potrzebujesz złożonych obliczeń: kalkulacja pochodnych metryk (np. error rate = errors/total), warunkowe dodawanie tagów, agregacja wielu pól. Starlark jest bezpieczny (brak I/O, bez importów) i szybki. Przykład: def apply(metric): metric.fields["error_rate"] = metric.fields["errors"] / metric.fields["total"]; return metric.
Jak skonfigurować multi-output Telegraf — InfluxDB i Prometheus? +
Telegraf obsługuje wiele outputs jednocześnie — dane są kopiane do każdego sinka. Dodaj dwa bloki outputs w telegraf.conf: [[outputs.influxdb_v2]] z url, token, org, bucket dla InfluxDB V2 oraz [[outputs.prometheus_client]] z listen=":9273" dla Prometheus scrape endpoint. Prometheus skrapuje GET http://agent:9273/metrics a InfluxDB dostaje push. Przydatne podczas migracji między stosami monitoringu.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.