 Autor: [Piotr Wasilewski](/autorzy/piotr-wasilewski) Architekt rozwiązań chmurowych · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Telegraf — zaawansowane pluginy

# 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.

Contabo

VPS z dużym RAM — idealny dla pełnego stacku InfluxDB + Telegraf + Grafana

TICK Stack

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS do testowania Telegraf z custom metrics i Prometheus output

Dev VPS

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

home.pl

VPS z polskim supportem do monitorowania infrastruktury produkcyjnej

PL VPS

[Aktywuj rabat →](/out/home-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/home-pl)

## Powiązane strony

-   [InfluxDB v2 + Telegraf — monitoring VPS i aplikacji](/baza-wiedzy/influxdb-telegraf-monitoring)
-   [Prometheus + Grafana — monitoring VPS](/baza-wiedzy/monitoring-grafana-prometheus)
-   [Prometheus Alertmanager — konfiguracja alertów](/baza-wiedzy/prometheus-alertmanager-konfiguracja)
-   [Wszystkie artykuły](/baza-wiedzy/)