From 33a3163cf785aef4a55cd77900d10b8642dc3793 Mon Sep 17 00:00:00 2001 From: Ormon Abyshev Date: Mon, 30 Mar 2026 11:33:15 +0300 Subject: [PATCH] Added a docker practice solution --- .gitignore | 2 +- README.md | 65 +- assets/image/Grafana - Created Dashborads.png | Bin 0 -> 26368 bytes assets/image/Grafana - Dashboards.png | Bin 0 -> 12292 bytes assets/image/Grafana Data Panel.png | Bin 0 -> 181605 bytes assets/image/Grafana Data.png | Bin 0 -> 154093 bytes assets/image/Grafana No data.png | Bin 0 -> 67755 bytes assets/image/Grafana Panel No data.png | Bin 0 -> 118430 bytes .../Linux A - sudo docker compose ps.png | Bin 0 -> 30611 bytes .../Linux B - creatd broker container.png | Bin 0 -> 13482 bytes assets/image/Linux C - mqtt consumer.png | Bin 0 -> 25436 bytes .../Linux C - sudo docker compose ps.png | Bin 0 -> 11104 bytes assets/image/MQTT Explorer.png | Bin 0 -> 83302 bytes report.md | 117 + vms/client/simulator/.env | 6 + vms/client/simulator/Dockerfile | 19 +- vms/client/simulator/app/main.py | 66 + vms/client/simulator/app/sensors.py | 123 + vms/client/simulator/docker-compose.yml | 106 +- vms/client/simulator/requirements.txt | Bin 17 -> 38 bytes vms/gateway/docker-compose.yml | 9 + vms/gateway/mosquitto/config/mosquitto.conf | 14 + vms/server/docker-compose.yml | 44 + .../Docker Practice-1774662825893.json | 444 + .../provisioning/dashboards/default.yaml | 12 + .../provisioning/datasources/default.yaml | 13 + vms/server/telegraf/telegraf.conf | 14990 ++++++++++++++++ 27 files changed, 15942 insertions(+), 88 deletions(-) create mode 100644 assets/image/Grafana - Created Dashborads.png create mode 100644 assets/image/Grafana - Dashboards.png create mode 100644 assets/image/Grafana Data Panel.png create mode 100644 assets/image/Grafana Data.png create mode 100644 assets/image/Grafana No data.png create mode 100644 assets/image/Grafana Panel No data.png create mode 100644 assets/image/Linux A - sudo docker compose ps.png create mode 100644 assets/image/Linux B - creatd broker container.png create mode 100644 assets/image/Linux C - mqtt consumer.png create mode 100644 assets/image/Linux C - sudo docker compose ps.png create mode 100644 assets/image/MQTT Explorer.png create mode 100644 report.md create mode 100644 vms/client/simulator/.env create mode 100644 vms/client/simulator/app/main.py create mode 100644 vms/client/simulator/app/sensors.py create mode 100644 vms/gateway/docker-compose.yml create mode 100644 vms/gateway/mosquitto/config/mosquitto.conf create mode 100644 vms/server/docker-compose.yml create mode 100644 vms/server/grafana/provisioning/dashboards/Docker Practice-1774662825893.json create mode 100644 vms/server/grafana/provisioning/dashboards/default.yaml create mode 100644 vms/server/grafana/provisioning/datasources/default.yaml create mode 100644 vms/server/telegraf/telegraf.conf diff --git a/.gitignore b/.gitignore index 723ef36..eba74f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -.idea \ No newline at end of file +venv/ \ No newline at end of file diff --git a/README.md b/README.md index 9e8a9c1..6871812 100644 --- a/README.md +++ b/README.md @@ -1,63 +1,2 @@ -# Введение -Данная практика посвещена базовым принципам Docker. Для выполнения практики необходимо использовать 3 виртуальные машины Linux. - -# Задание - -Необходимо развернуть следующую систему: - -![image](assets/images/DockerTask.png) - -Симуляторы сенсоров, развернутые в докер контейнерах, публикуют сообщения на Mqtt брокер. Сервис Consumer подписывается на все сообщение, -опубликованные в брокере, и заносит их в базу данных временных рядов. Сервис dashboard отображает графики полученных данных от сервисов. - -Для выполнения данного задания необходимо: -1. Использовать три виртуальные машины из предыдущей практики. Установить на каждой docker и docker-compose. - -2. Linux A. - 1. Разработать скрипты - симулятор технологических данных. Создать класс Sensor, а также наследников этого класса (указать 4 реально существующих типа датчиков, например, температура, давление, потребляемый ток). - 2. В основной программе реализовать клиента, который подключается к mqtt брокеру и публикует сообщения. - 3. Конфигурацию типов датчиков вывести через переменные среды - 4. Запуск реализовать с помощью докер контейнеров. Для запуска нескольких типов использовать docker-compose. - 5. В итоге сделать 4 типа датчиков, запустить 6 контейнеров разных типов, где задается: - * тип датчика - * название датчика - * дискретность публикации сообщений - * (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) тип формулы (подумайте как можно через конфигурацию повлиять на характер генерации нового числа) - * в формуле предусмотрите в качестве операнда дату вашего рождения (например умножение на год рождения или месяц) - * (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) тип топика (json формат (topic - /sensor/type, value {"name":"sensor1", "value": 22.4} ) или значение в конкретный топик (topic - /sensor/type/value, value - 22.4)) - 6. Залить на свою страницу в докерхаб созданный image контейнера в публичный репозиторий. - -3. Linux B - 1. Развернуть mosquitto брокер с помощью docker. Настроить проброс портов, необходимый для работы приложения. - 2. Настроить конфигурационный файл для брокера. Использовать volume для подгрузки файла в докер. - 3. В файрволе открыть порт, необходимый для работы брокера. -4. Linux C - 1. Развернуть influxdb (1.8 версия), telegraf, grafana с помощью docker-compose - 2. Настроить подписку телеграфа на mqtt топики брокера - 3. Сохранять все сообщения в influxdb - 4. В grafana вывести дашборды с текущими значениями всех датчиков и агрегированными показаниями (среднее значение по всем датчикам) - сделать скриншот - 5. Необходимо создать volume для каждого контейнера с конфигурационными файлами. (ДОП ЗАДАЧА, НЕОБЯЗАТЕЛЬНО) При пересоздании контейнеров конфигурация дашбордов должна сохранится (без самих данных). - 6. В конфигурационных файлах ссылаться по alias контейнеров (не по ip адресам) -5. При загрузки задания в гит репозиторий создать две ветки develop и master. В master загрузить только readme - задание. - В ветку develop - загружаем сделанное задание. Как только отправляете мне на проверку задание, создаете пул реквест в ветку мастер и назначаете меня ревьювером. Таким образом я смогу комментировать ваш репозиторий. -6. Оформить инструкцию в виде Markdown файла. Приложить конфигурационные файлы в репозиторий. - Критерием успеха выполнения задания будет являтся также написанная инструкция по запуску ваших контейнеров. То есть, если я загружу с докерхаба ваш image, запущу docker-compose файлы на своих виртуальных машинах, и при этом смогу зайти в интерфейс и посмотреть дашборд с потоком данных, то задание выполнено. - -Репозиторий оформить следующим образом: -- root - - assets - - images - картинки для отчета - - vms - - client - - simulator - код симулятора и докерфайл - - gateway - - mosquitto - папка с конфигом для mosquitto + sh скрипт по запуску докера - - server - - grafana - конфиги для тома графаны - - influxdb - конфиги для тома инфлукса - - telegraf - конфиги для тома телеграфа - - docker-compose.yml - - - report.md - Отчет markdown - -P.S. опираться можно на данную [статью](https://coderlessons.com/articles/programmirovanie/raspberry-pi-iot-datchiki-influxdb-mqtt-i-grafana) +# Docker-Practice +Sensor & MQTT & Telegraf & InfluxDB & Grafana & Docker diff --git a/assets/image/Grafana - Created Dashborads.png b/assets/image/Grafana - Created Dashborads.png new file mode 100644 index 0000000000000000000000000000000000000000..8b168edad05450bd39247b0603aa5efdf7fbbe31 GIT binary patch literal 26368 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 literal 0 HcmV?d00001 diff --git a/assets/image/Grafana - Dashboards.png b/assets/image/Grafana - Dashboards.png new file mode 100644 index 0000000000000000000000000000000000000000..67ad806e933d2b4dcb669a6c59a02690eed4e8e9 GIT binary patch literal 12292 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𝔘JXNsWNhlhh3sm$9fHu8FUx(t*TDd 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

3Rhq!h z`!_GMmw>b0M|&<<`k*HU%%t^h=~a3K8I|GXQ$&Z(ZW8c~jTM3?4<{^E4ya(u9v(!8 z0_oNC64#*4fyvL@T44a8{$P99kGvmD|5yWHJ-n!?PW0b)LwR33N1f~mbJf@tYaDEm zDbldQ&hk$(z|0a%W@}dWH;wC+gC;2sa1}%Ehu950O@FbFluxnIpwu9&G`MT?ieF$L zP3~c4{*LtP!vkD7jsTl?Ad^^xT(Z(P2Ie)_TO~x4^auA8afCMtr1lMJO{rkCAf0WJ z`bmdCAu+<3k%{-77IqftR}ShUJvYPa{nIeK>7{{5NT+aLI)uc~%lyTL^e)Bymj7mm z2)f_X81L_Jwtf2zrg!P;?5714%XSPxmK%*ziLbf@CzDSPmf)`Esz+Va)M{BNzI~Eh zUH7r09Xyqj(Z(QIg?Az7dts**>XDUXMN|95Iw(Ece;fDkFeFqNKvQvT!c1dhmjV%u~Dw*Xs(Il*jelZJ4XW&=X z)Dy7mftY>*XA7A_(o=MLg$Bx<<9Xp-8rGZo?1R@Cm(MB457v}~qC{z5DJ4a1_1@I% z{nR$_fQT3$t1A)^l*R!n{p%QiDyv>pw!a}@694g((xH`=Rt5O}bh*2o9rW@YyRQ7Z zAK8^gUFH|rr!l)z?@)JmmEI`z5BGC&6b|pQ4dQ*&H=7-mvQ2HY&f2)Hlr>xBeF zOZ$>+E==DSlWzF|O(M(0{{BSesSXdRu^%;{I} zI6EQgktNQkQ>87^Q3 z(Y7#PjXl2J4%sp>p1f+;Hy>^I{(~PEZXvMTjP_~%`FKMlniFVYv-3(5nc!^s-8Us1 zGp!w_jvlkmxNNoVNgk!wX`xaY&cC%slt!O}BI$ic2C^gUTw76?4&m5=x?my?^NCbrTEF`V}XX{y@R!pS*-$Z7Lk1KYP4NS@JvrpbRk&dN@y zM6$EpaKm1#2c_FrcPT9XiM>g z$e1T3O~B}fK+BTtkahysz_5-};%uQppLTlNPgy^-OyHtrA_9T1xD5FD4+cZ?n9qY! zd3gOBy2qz?0K+YJ4LXit*nj+7KfLIn7g#q!ljte>6#lfzN=V5R8?IkiHkw zVFDjuw*~1(hrcARocbD^#qDX^sm}vonA}IV@BLZ_6FRE%pU*(|;1()t*L-h!)4#k1 zC4v54t#PNw4}$1^N-eOcSpCrhuvWbGjy<-!`}&PvHyMmS_|<&?SocvePBP~8M4D@G zi|b`?Rn&=ZF$0F=&ldj4WD$r+-2O52>Qw!0y6h03fcB4dx&Gi81JGdAEgW(ns*9le z)i{$gL+M~PKzCBbw9?!E<|UD4Af13xguZH#L{IeJ z+`^sm%HUTv<)2KpSYC8;J%k7|mJgtCJLEy>HQ;YKl7E|%YnZ>hEBk)`OJ6TE^HqCk zR8|GwTi`;^O27}mMEq;I=ynzu-);cJEj0lcJOc5X(c?IP+RZ=5fJF?jTeV4`eF z{d)J(crJu9W@L`$oSfIcIp;T*{P7cRVeWBl;ih+%!e5I_q5>Q+`fs`$p-rYvW!e>$ zKDs%8p)5CPTAe}xW&gja4lMQYoyTYvE{y+6emJs2{^SfrVrW)1uo`W

  • dBBwY!MCns11#JY4P4pvPdy^i90$m(GLa<^ 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 literal 0 HcmV?d00001 diff --git a/assets/image/Grafana No data.png b/assets/image/Grafana No data.png new file mode 100644 index 0000000000000000000000000000000000000000..4edb51ed8955abd28998fbbe09c964d1c0dcb289 GIT binary patch literal 67755 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 P@OK-gDqAXT^7Q`zcY@y8 literal 0 HcmV?d00001 diff --git a/assets/image/Grafana Panel No data.png b/assets/image/Grafana Panel No data.png new file mode 100644 index 0000000000000000000000000000000000000000..cb539c96bb4cce7be7e77cf687c98208cd452c68 GIT binary patch literal 118430 zcma&NbzEG@@;;mpqG&>J_uv{_gN5KOg9Qy9+$~se2rxJVcZb0x!QFKr1c$+8aCr~O z-FtWU?(ciwfB2kfW=?lkRaZS#^>mQDtOUw4yl40B-9wRlE2?zP~;1riG#QopXQv_S6MBVM&Mn_6;MtRnQy)La-XTnD9%?hX)A3 z`VWQg3!}^XqJIlkWq@d!TdF9xBawamiCLV9$uzxd?3A`+>6A8UX}&Y5TDZrH%j!qL zhKNiWx3C@^k@lW7f%_;$%GNX0ZmlH%nJ@qwk>uX}CqnlS(7o^d`LRghXG>A}@GG`I z5B}+^cfYkj8kqdk(4QWQRPN1ytBJTpEC2S|e|@JL5@{*?Uvu95Q@!wB1%o-iZMPBW zKdvj%k`(&sFDw0H+A`JqhM-B;mB_v~|M+GS=o`qxf7&XEUNJ&9qzK+k8t4CyZx(|1 zTOj>iK)!#Tb?`5qzRRkE_kLLNXq-{BBB|`MvRd>Tq)*p;u$#4-noErZ`LQ z={LI|5~MiOcfF;JZjf>p)n{tlmT8@0nnrG*KZty1q zmH{w@c?9ssq45@7QfNigMd(d>2f;4`DdY6{`c>fs(g%jL&e z&QIq#n0nlZ#~@jP=A?#*b`fI*CQc_}YSi26sgwY28$vEVd^Z%krRI}*42Po42kBlL zQI-jnW`+vT3P0CG${69>jIV1yN6YfYF#Ua6zapuxT|b)vhmD)WHwQBl|I*yHgm?C+ zmEaTKhFoCno_z?u475gecBkb%dLg}=z$E#0z5?hMxzA|#eRXv4iV)P_@DIG`{pzJ4 zZ}-s@c`_kr=S?f?L;536z!qk(exHg~aYS|69qHFt{hY=3`bfVnROGE`^7xmR1AiMt z2+c2qHi%u7e==0QFbYuA`11?n7b)7QNc6-Iz%DIsAV%bH+?-Of{=i@6cllf|zY2=> z{pT*t-8)BvqUm9BDa_rSH(7%yz$?>e^IAa)1HDyZ)qmbS^UirdwQ%d~|6U`rR4y|I zmht8`>c6C^;8Sw~Q*G(9ehO!odgXf~COq&hdt^@uiP+Cu=Gp%t%?mf!Mtj`bEI{G5 z=iPvHc)0egl6zc#qI{8`iJ|K?aABv8djA?Mn{24y1@jZ;IH7iE+yE4KcA@MO*Nc!V zol<8p12gJVl}q4JqD89ec@~CP7xsQ>4Ub&i837}x0f4G z%Y-C}SPnwFyljs{k5{=j`|L7u+fO%-4QPHXeRC{(gc_Y58E__<-Up}sadQm<^Z#Ub z`bS5UFHD8>;^kL1x5>Vy#h6^_w4BsOSB3~t93sa=#JtUF@{C+XAGX#|j?Y%Y!AGjJ zcMRllKlT|GOcYoBIZrt{3RmH@x=J8XKHlmK6U4@*1IFU62qPlUg1w{QRhwfNTU*c# zUs?15^C^Ks`Q76a7LG;z{9L$ZKr!f)ppbWcbw^iGG2iauxnDt5Rd4rLL^kpT_QTg* z-BJef;e;H|?mvmw{W^6Sn;$%$dx=@WfS*6a?1A}S;FkqXM*t_tqgy_`U2t0Mc9qib z(B|di%L`Xt)YtoBo7$VYg}t$FKgo4DV=p>TpoH_ zT1L9Uk7GGINgS3#y|kgh!CPZIx?aA^%NRd*mWOU=z#>8|*%;KgN4X2N?X_pArJK>$ ze1

    / +# ## See documentation for available schemes. +# bridges = [ "address://:@/" ] +# +# ## Manual device to room assignments to apply during status evaluation. +# ## E.g. for motion sensors which are reported without a room assignment. +# # room_assignments = { "Motion sensor 1" = "Living room", "Motion sensor 2" = "Corridor" } +# +# ## Timeout for gathering information +# # timeout = "10s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# # tls_key_pwd = "secret" +# ## Use TLS but skip chain & host verification + + +# # Gathers huge pages measurements. +# # This plugin ONLY supports Linux +# [[inputs.hugepages]] +# ## Supported huge page types: +# ## - "root" - based on root huge page control directory: +# ## /sys/kernel/mm/hugepages +# ## - "per_node" - based on per NUMA node directories: +# ## /sys/devices/system/node/node[0-9]*/hugepages +# ## - "meminfo" - based on /proc/meminfo file +# # types = ["root", "per_node"] + + +# # Gather Icinga2 status +# [[inputs.icinga2]] +# ## Required Icinga2 server address +# # server = "https://localhost:5665" +# +# ## Collected Icinga2 objects ("services", "hosts") +# ## Specify at least one object to collect from /v1/objects endpoint. +# # objects = ["services"] +# +# ## Collect metrics from /v1/status endpoint +# ## Choose from: +# ## "ApiListener", "CIB", "IdoMysqlConnection", "IdoPgsqlConnection" +# # status = [] +# +# ## Credentials for basic HTTP authentication +# # username = "admin" +# # password = "admin" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = true + + +# # Gets counters from all InfiniBand cards and ports installed +# # This plugin ONLY supports Linux +# [[inputs.infiniband]] +# # no configuration +# +# ## Collect RDMA counters +# # gather_rdma = false + + +# # Read InfluxDB-formatted JSON metrics from one or more HTTP endpoints +# [[inputs.influxdb]] +# ## Works with InfluxDB debug endpoints out of the box, +# ## but other services can use this format too. +# ## See the influxdb plugin's README for more details. +# +# ## Multiple URLs from which to read InfluxDB-formatted JSON +# ## Default is "http://localhost:8086/debug/vars". +# urls = [ +# "http://localhost:8086/debug/vars" +# ] +# +# ## Username and password to send using HTTP Basic Authentication. +# # username = "" +# # password = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## http request & header timeout +# timeout = "5s" + + +# # Intel Baseband Accelerator Input Plugin collects metrics from both dedicated and integrated +# # Intel devices that provide Wireless Baseband hardware acceleration. +# # This plugin ONLY supports Linux. +# [[inputs.intel_baseband]] +# ## Path to socket exposed by pf-bb-config for CLI interaction (mandatory). +# ## In version v23.03 of pf-bb-config the path is created according to the schema: +# ## "/tmp/pf_bb_config.0000\:\:..sock" where 0000\:\:. is the PCI device ID. +# socket_path = "" +# +# ## Path to log file exposed by pf-bb-config with telemetry to read (mandatory). +# ## In version v23.03 of pf-bb-config the path is created according to the schema: +# ## "/var/log/pf_bb_cfg_0000\:\:..log" where 0000\:\:. is the PCI device ID. +# log_file_path = "" +# +# ## Specifies plugin behavior regarding unreachable socket (which might not have been initialized yet). +# ## Available choices: +# ## - error: Telegraf will return an error on startup if socket is unreachable +# ## - ignore: Telegraf will ignore error regarding unreachable socket on both startup and gather +# # unreachable_socket_behavior = "error" +# +# ## Duration that defines how long the connected socket client will wait for +# ## a response before terminating connection. +# ## Since it's local socket access to a fast packet processing application, the timeout should +# ## be sufficient for most users. +# ## Setting the value to 0 disables the timeout (not recommended). +# # socket_access_timeout = "1s" +# +# ## Duration that defines maximum time plugin will wait for pf-bb-config to write telemetry to the log file. +# ## Timeout may differ depending on the environment. +# ## Must be equal or larger than 50ms. +# # wait_for_telemetry_timeout = "1s" + + +# ## Reads metrics from DPDK using v2 telemetry interface. +# ## This plugin ONLY supports Linux +# [[inputs.intel_dlb]] +# ## Path to DPDK telemetry socket. +# # socket_path = "/var/run/dpdk/rte/dpdk_telemetry.v2" +# +# ## Default eventdev command list, it gathers metrics from socket by given commands. +# ## Supported options: +# ## "/eventdev/dev_xstats", "/eventdev/port_xstats", +# ## "/eventdev/queue_xstats", "/eventdev/queue_links" +# # eventdev_commands = ["/eventdev/dev_xstats", "/eventdev/port_xstats", "/eventdev/queue_xstats", "/eventdev/queue_links"] +# +# ## Detect DLB devices based on device id. +# ## Currently, only supported and tested device id is `0x2710`. +# ## Configuration added to support forward compatibility. +# # dlb_device_types = ["0x2710"] +# +# ## Specifies plugin behavior regarding unreachable socket (which might not have been initialized yet). +# ## Available choices: +# ## - error: Telegraf will return an error on startup if socket is unreachable +# ## - ignore: Telegraf will ignore error regarding unreachable socket on both startup and gather +# # unreachable_socket_behavior = "error" + + +# # Intel Platform Monitoring Technology plugin exposes Intel PMT metrics available through the Intel PMT kernel space. +# # This plugin ONLY supports Linux. +# [[inputs.intel_pmt]] +# ## Filepath to PMT XML within local copies of XML files from PMT repository. +# ## The filepath should be absolute. +# spec = "/home/telegraf/Intel-PMT/xml/pmt.xml" +# +# ## Enable metrics by their datatype. +# ## See the Enabling Metrics section in README for more details. +# ## If empty, all metrics are enabled. +# ## When used, the alternative option samples_enabled should NOT be used. +# # datatypes_enabled = [] +# +# ## Enable metrics by their name. +# ## See the Enabling Metrics section in README for more details. +# ## If empty, all metrics are enabled. +# ## When used, the alternative option datatypes_enabled should NOT be used. +# # samples_enabled = [] + + +# # Collect statistics about itself +# [[inputs.internal]] +# ## If true, collect telegraf memory stats. +# # collect_memstats = true +# +# ## If true, collect metrics from Go's runtime.metrics. For a full list see: +# ## https://pkg.go.dev/runtime/metrics +# # collect_gostats = false +# +# ## Collect statistics per plugin instance and not per plugin type +# # per_instance = false + + +# # Monitors internet speed using speedtest.net service +# [[inputs.internet_speed]] +# ## This plugin downloads many MB of data each time it is run. As such +# ## consider setting a higher interval for this plugin to reduce the +# ## demand on your internet connection. +# # interval = "60m" +# +# ## Enable to reduce memory usage +# # memory_saving_mode = false +# +# ## Caches the closest server location +# # cache = false +# +# ## Number of concurrent connections +# ## By default or set to zero, the number of CPU cores is used. Use this to +# ## reduce the impact on system performance or to increase the connections on +# ## faster connections to ensure the fastest speed. +# # connections = 0 +# +# ## Test mode +# ## By default, a single server is used for testing. This may work for most, +# ## however, setting to "multi" will reach out to multiple servers in an +# ## attempt to get closer to ideal internet speeds. +# ## And "multi" will use all available servers to calculate average packet loss. +# # test_mode = "single" +# +# ## Server ID exclude filter +# ## Allows the user to exclude or include specific server IDs received by +# ## speedtest-go. Values in the exclude option will be skipped over. Values in +# ## the include option are the only options that will be picked from. +# ## +# ## See the list of servers speedtest-go will return at: +# ## https://www.speedtest.net/api/js/servers?engine=js&limit=10 +# ## +# # server_id_exclude = [] +# # server_id_include = [] + + +# # This plugin gathers interrupts data from /proc/interrupts and /proc/softirqs. +# [[inputs.interrupts]] +# ## When set to true, cpu metrics are tagged with the cpu. Otherwise cpu is +# ## stored as a field. +# ## +# ## The default is false for backwards compatibility, and will be changed to +# ## true in a future version. It is recommended to set to true on new +# ## deployments. +# # cpu_as_tag = false +# +# ## To filter which IRQs to collect, make use of tagpass / tagdrop: +# # [inputs.interrupts.tagdrop] +# # irq = [ "NET_RX", "TASKLET" ] + + +# # Read metrics from the bare metal servers via IPMI +# [[inputs.ipmi_sensor]] +# ## Specify the path to the ipmitool executable +# # path = "/usr/bin/ipmitool" +# +# ## Use sudo +# ## Setting 'use_sudo' to true will make use of sudo to run ipmitool. +# ## Sudo must be configured to allow the telegraf user to run ipmitool +# ## without a password. +# # use_sudo = false +# +# ## Servers +# ## Specify one or more servers via a url. If no servers are specified, local +# ## machine sensor stats will be queried. Uses the format: +# ## [username[:password]@][protocol[(address)]] +# ## e.g. root:passwd@lan(127.0.0.1) +# # servers = ["USERID:PASSW0RD@lan(192.168.1.1)"] +# +# ## Session privilege level +# ## Choose from: CALLBACK, USER, OPERATOR, ADMINISTRATOR +# # privilege = "ADMINISTRATOR" +# +# ## Timeout +# ## Timeout for the ipmitool command to complete. +# # timeout = "20s" +# +# ## Metric schema version +# ## See the plugin readme for more information on schema versioning. +# # metric_version = 1 +# +# ## Sensors to collect +# ## Choose from: +# ## * sdr: default, collects sensor data records +# ## * chassis_power_status: collects the power status of the chassis +# ## * dcmi_power_reading: collects the power readings from the Data Center Management Interface +# # sensors = ["sdr"] +# +# ## Hex key +# ## Optionally provide the hex key for the IMPI connection. +# # hex_key = "" +# +# ## Cache +# ## If ipmitool should use a cache +# ## Using a cache can speed up collection times depending on your device. +# # use_cache = false +# +# ## Path to the ipmitools cache file (defaults to OS temp dir) +# ## The provided path must exist and must be writable +# # cache_path = "" + + +# # Gather packets and bytes counters from Linux ipsets +# [[inputs.ipset]] +# ## By default, we only show sets which have already matched at least 1 packet. +# ## set include_unmatched_sets = true to gather them all. +# # include_unmatched_sets = false +# +# ## Adjust your sudo settings appropriately if using this option ("sudo ipset save") +# ## You can avoid using sudo or root, by setting appropriate privileges for +# ## the telegraf.service systemd service. +# # use_sudo = false +# +# ## Add number of entries and number of individual IPs (resolve CIDR syntax) for each ipset +# # count_per_ip_entries = false +# +# ## The default timeout of 1s for ipset execution can be overridden here: +# # timeout = "1s" + + +# # Gather packets and bytes throughput from iptables +# # This plugin ONLY supports Linux +# [[inputs.iptables]] +# ## iptables require root access on most systems. +# ## Setting 'use_sudo' to true will make use of sudo to run iptables. +# ## Users must configure sudo to allow telegraf user to run iptables with +# ## no password. +# ## iptables can be restricted to only list command "iptables -nvL". +# # use_sudo = false +# +# ## Setting 'use_lock' to true runs iptables with the "-w" option. +# ## Adjust your sudo settings appropriately if using this option +# ## ("iptables -w 5 -nvl") +# # use_lock = false +# +# ## Define an alternate executable, such as "ip6tables". Default is "iptables". +# # binary = "ip6tables" +# ## defines the table to monitor: +# table = "filter" +# +# ## defines the chains to monitor. +# ## NOTE: iptables rules without a comment will not be monitored. +# ## Read the plugin documentation for more information. +# chains = [ "INPUT" ] + + +# # Collect virtual and real server stats from Linux IPVS +# # This plugin ONLY supports Linux +# [[inputs.ipvs]] +# # no configuration + + +# # Read jobs and cluster metrics from Jenkins instances +# [[inputs.jenkins]] +# ## The Jenkins URL in the format "schema://host:port" +# url = "http://my-jenkins-instance:8080" +# # username = "admin" +# # password = "admin" +# +# ## Set response_timeout +# response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use SSL but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Optional Max Job Build Age filter +# ## Default 1 hour, ignore builds older than max_build_age +# # max_build_age = "1h" +# +# ## Optional Sub Job Depth filter +# ## Jenkins can have unlimited layer of sub jobs +# ## This config will limit the layers of pulling, default value 0 means +# ## unlimited pulling until no more sub jobs +# # max_subjob_depth = 0 +# +# ## Optional Sub Job Per Layer +# ## In workflow-multibranch-plugin, each branch will be created as a sub job. +# ## This config will limit to call only the lasted branches in each layer, +# ## empty will use default value 10 +# # max_subjob_per_layer = 10 +# +# ## Jobs to include or exclude from gathering +# ## When using both lists, job_exclude has priority. +# ## Wildcards are supported: [ "jobA/*", "jobB/subjob1/*"] +# # job_include = [ "*" ] +# # job_exclude = [ ] +# +# ## Nodes to include or exclude from gathering +# ## When using both lists, node_exclude has priority. +# # node_include = [ "*" ] +# # node_exclude = [ ] +# +# ## Worker pool for jenkins plugin only +# ## Empty this field will use default value 5 +# # max_connections = 5 +# +# ## When set to true will add node labels as a comma-separated tag. If none, +# ## are found, then a tag with the value of 'none' is used. Finally, if a +# ## label contains a comma it is replaced with an underscore. +# # node_labels_as_tag = false + + +# # Read JMX metrics from a Jolokia REST agent endpoint +# [[inputs.jolokia2_agent]] +# # default_tag_prefix = "" +# # default_field_prefix = "" +# # default_field_separator = "." +# +# # Add agents URLs to query +# urls = ["http://localhost:8080/jolokia"] +# # username = "" +# # password = "" +# # response_timeout = "5s" +# +# ## Optional origin URL to include as a header in the request. Some endpoints +# ## may reject an empty origin. +# # origin = "" +# +# ## Optional TLS config +# # tls_ca = "/var/private/ca.pem" +# # tls_cert = "/var/private/client.pem" +# # tls_key = "/var/private/client-key.pem" +# # insecure_skip_verify = false +# +# ## Add metrics to read +# [[inputs.jolokia2_agent.metric]] +# name = "java_runtime" +# mbean = "java.lang:type=Runtime" +# paths = ["Uptime"] + + +# # Read JMX metrics from a Jolokia REST proxy endpoint +# [[inputs.jolokia2_proxy]] +# # default_tag_prefix = "" +# # default_field_prefix = "" +# # default_field_separator = "." +# +# ## Proxy agent +# url = "http://localhost:8080/jolokia" +# # username = "" +# # password = "" +# # response_timeout = "5s" +# +# ## Optional origin URL to include as a header in the request. Some endpoints +# ## may reject an empty origin. +# # origin = "" +# +# ## Optional TLS config +# # tls_ca = "/var/private/ca.pem" +# # tls_cert = "/var/private/client.pem" +# # tls_key = "/var/private/client-key.pem" +# # insecure_skip_verify = false +# +# ## Add proxy targets to query +# # default_target_username = "" +# # default_target_password = "" +# [[inputs.jolokia2_proxy.target]] +# url = "service:jmx:rmi:///jndi/rmi://targethost:9999/jmxrmi" +# # username = "" +# # password = "" +# +# ## Add metrics to read +# [[inputs.jolokia2_proxy.metric]] +# name = "java_runtime" +# mbean = "java.lang:type=Runtime" +# paths = ["Uptime"] + + +# # Read Kapacitor-formatted JSON metrics from one or more HTTP endpoints +# [[inputs.kapacitor]] +# ## Multiple URLs from which to read Kapacitor-formatted JSON +# ## Default is "http://localhost:9092/kapacitor/v1/debug/vars". +# urls = [ +# "http://localhost:9092/kapacitor/v1/debug/vars" +# ] +# +# ## Time limit for http requests +# timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Get kernel statistics from /proc/vmstat +# # This plugin ONLY supports Linux +# [[inputs.kernel_vmstat]] +# # no configuration + + +# # Read metrics from the Kubernetes api +# [[inputs.kube_inventory]] +# ## URL for the Kubernetes API. +# ## If empty in-cluster config with POD's service account token will be used. +# # url = "" +# +# ## URL for the kubelet, if set it will be used to collect the pods resource metrics +# # url_kubelet = "http://127.0.0.1:10255" +# +# ## Namespace to use. Set to "" to use all namespaces. +# # namespace = "default" +# +# ## Node name to filter to. No filtering by default. +# # node_name = "" +# +# ## Use bearer token for authorization. +# ## Ignored if url is empty and in-cluster config is used. +# # bearer_token = "/var/run/secrets/kubernetes.io/serviceaccount/token" +# +# ## Set response_timeout (default 5 seconds) +# # response_timeout = "5s" +# +# ## Optional Resources to exclude from gathering +# ## Leave them with blank with try to gather everything available. +# ## Values can be - "daemonsets", deployments", "endpoints", "ingress", +# ## "nodes", "persistentvolumes", "persistentvolumeclaims", "pods", "services", +# ## "statefulsets" +# # resource_exclude = [ "deployments", "nodes", "statefulsets" ] +# +# ## Optional Resources to include when gathering +# ## Overrides resource_exclude if both set. +# # resource_include = [ "deployments", "nodes", "statefulsets" ] +# +# ## selectors to include and exclude as tags. Globs accepted. +# ## Note that an empty array for both will include all selectors as tags +# ## selector_exclude overrides selector_include if both set. +# # selector_include = [] +# # selector_exclude = ["*"] +# +# ## Optional TLS Config +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Uncomment to remove deprecated metrics. +# # fieldexclude = ["terminated_reason"] + + +# # Read metrics from the kubernetes kubelet api +# [[inputs.kubernetes]] +# ## URL for the kubelet, if empty read metrics from all nodes in the cluster +# url = "http://127.0.0.1:10255" +# +# ## Use bearer token for authorization. ('bearer_token' takes priority) +# ## If both of these are empty, we'll use the default serviceaccount: +# ## at: /var/run/secrets/kubernetes.io/serviceaccount/token +# ## +# ## To re-read the token at each interval, please use a file with the +# ## bearer_token option. If given a string, Telegraf will always use that +# ## token. +# # bearer_token = "/var/run/secrets/kubernetes.io/serviceaccount/token" +# ## OR +# # bearer_token_string = "abc_123" +# +# ## Kubernetes Node Metric Name +# ## The default Kubernetes node metric name (kubernetes_node) is the same +# ## for the kubernetes and kube_inventory plugins. To avoid conflicts, set this +# ## option to a different value. +# # node_metric_name = "kubernetes_node" +# +# ## Pod labels to be added as tags. An empty array for both include and +# ## exclude will include all labels. +# # label_include = [] +# # label_exclude = ["*"] +# +# ## Set response_timeout (default 5 seconds) +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # LDAP monitoring plugin +# [[inputs.ldap]] +# ## Server to monitor +# ## The scheme determines the mode to use for connection with +# ## ldap://... -- unencrypted (non-TLS) connection +# ## ldaps://... -- TLS connection +# ## starttls://... -- StartTLS connection +# ## ldapi://... -- UNIX socket connection +# ## If no port is given, the default ports, 389 for ldap and starttls and +# ## 636 for ldaps, are used, there is no port on UNIX sockets. +# server = "ldap://localhost" +# +# ## Server dialect, can be "openldap" or "389ds" +# # dialect = "openldap" +# +# # What sort of Bind to use +# ## Empty or "simple" means to use a simple LDAP bind, otherwise use a +# ## specified SASL mechanism (only EXTERNAL currently supported - for TLS +# ## client certs or UNIX credentials) +# # bind_mechanism = "simple" +# +# # DN and password to bind with +# ## If bind_dn is empty an anonymous bind is performed. +# bind_dn = "" +# bind_password = "" +# +# ## Reverse the field names constructed from the monitoring DN +# # reverse_field_names = false +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from a LeoFS Server via SNMP +# [[inputs.leofs]] +# ## An array of URLs of the form: +# ## host [ ":" port] +# servers = ["127.0.0.1:4010"] + + +# # The libvirt plugin collects statistics from virtualized guests using virtualization libvirt API. +# [[inputs.libvirt]] +# ## Domain names from which libvirt gather statistics. +# ## By default (empty or missing array) the plugin gather statistics from each domain registered in the host system. +# # domains = [] +# +# ## Libvirt connection URI with hypervisor. +# ## The plugin supports multiple transport protocols and approaches which are configurable via the URI. +# ## The general URI form: driver[+transport]://[username@][hostname][:port]/[path][?extraparameters] +# ## Supported transport protocols: ssh, tcp, tls, unix +# ## URI examples for each type of transport protocol: +# ## 1. SSH: qemu+ssh:///system?keyfile=/&known_hosts=/ +# ## 2. TCP: qemu+tcp:///system +# ## 3. TLS: qemu+tls:///system?pkipath=/certs_dir/ +# ## 4. UNIX: qemu+unix:///system?socket=/ +# ## Default URI is qemu:///system +# # libvirt_uri = "qemu:///system" +# +# ## Statistics groups for which libvirt plugin will gather statistics. +# ## Supported statistics groups: state, cpu_total, balloon, vcpu, interface, block, perf, iothread, memory, dirtyrate +# ## Empty array means no metrics for statistics groups will be exposed by the plugin. +# ## By default the plugin will gather all available statistics. +# # statistics_groups = ["state", "cpu_total", "balloon", "vcpu", "interface", "block", "perf", "iothread", "memory", "dirtyrate"] +# +# ## A list containing additional statistics to be exposed by libvirt plugin. +# ## Supported additional statistics: vcpu_mapping +# ## By default (empty or missing array) the plugin will not collect additional statistics. +# # additional_statistics = [] +# + + +# # Provides Linux CPU metrics +# # This plugin ONLY supports Linux +# [[inputs.linux_cpu]] +# ## Path for sysfs filesystem. +# ## See https://www.kernel.org/doc/Documentation/filesystems/sysfs.txt +# ## Defaults: +# # host_sys = "/sys" +# +# ## CPU metrics collected by the plugin. +# ## Supported options: +# ## "cpufreq", "thermal" +# ## Defaults: +# # metrics = ["cpufreq"] + + +# # Provides Linux sysctl fs metrics +# [[inputs.linux_sysctl_fs]] +# # no configuration + + +# # Read metrics from local Lustre service on OST, MDS +# # This plugin ONLY supports Linux +# [[inputs.lustre2]] +# ## An array of /proc globs to search for Lustre stats +# ## If not specified, the default will work on Lustre 2.12.x +# ## +# # mgs_procfiles = [ +# # "/sys/fs/lustre/mgs/*/eviction_count", +# # ] +# # ost_procfiles = [ +# # "/proc/fs/lustre/obdfilter/*/stats", +# # "/proc/fs/lustre/osd-ldiskfs/*/stats", +# # "/proc/fs/lustre/obdfilter/*/job_stats", +# # "/proc/fs/lustre/obdfilter/*/exports/*/stats", +# # "/proc/fs/lustre/osd-ldiskfs/*/brw_stats", +# # "/proc/fs/lustre/osd-zfs/*/brw_stats", +# # "/sys/fs/lustre/odbfilter/*/eviction_count", +# # ] +# # mds_procfiles = [ +# # "/proc/fs/lustre/mdt/*/md_stats", +# # "/proc/fs/lustre/mdt/*/job_stats", +# # "/proc/fs/lustre/mdt/*/exports/*/stats", +# # "/proc/fs/lustre/osd-ldiskfs/*/brw_stats", +# # "/proc/fs/lustre/osd-zfs/*/brw_stats", +# # "/sys/fs/lustre/mdt/*/eviction_count", +# # ] + + +# # Read metrics about LVM physical volumes, volume groups, logical volumes. +# [[inputs.lvm]] +# ## Use sudo to run LVM commands +# use_sudo = false +# +# ## The default location of the pvs binary can be overridden with: +# #pvs_binary = "/usr/sbin/pvs" +# +# ## The default location of the vgs binary can be overridden with: +# #vgs_binary = "/usr/sbin/vgs" +# +# ## The default location of the lvs binary can be overridden with: +# #lvs_binary = "/usr/sbin/lvs" + + +# # Gathers metrics from the /3.0/reports MailChimp API +# [[inputs.mailchimp]] +# ## MailChimp API key +# ## get from https://admin.mailchimp.com/account/api/ +# api_key = "" # required +# +# ## Reports for campaigns sent more than days_old ago will not be collected. +# ## 0 means collect all and is the default value. +# days_old = 0 +# +# ## Campaign ID to get, if empty gets all campaigns, this option overrides days_old +# # campaign_id = "" + + +# # Retrieves information on a specific host in a MarkLogic Cluster +# [[inputs.marklogic]] +# ## Base URL of the MarkLogic HTTP Server. +# url = "http://localhost:8002" +# +# ## List of specific hostnames to retrieve information. At least (1) required. +# # hosts = ["hostname1", "hostname2"] +# +# ## Using HTTP Basic Authentication. Management API requires 'manage-user' role privileges +# # username = "myuser" +# # password = "mypassword" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from one or many mcrouter servers. +# [[inputs.mcrouter]] +# ## An array of address to gather stats about. Specify an ip or hostname +# ## with port. ie tcp://localhost:11211, tcp://10.0.0.1:11211, etc. +# servers = ["tcp://localhost:11211", "unix:///var/run/mcrouter.sock"] +# +# ## Timeout for metric collections from all servers. Minimum timeout is "1s". +# # timeout = "5s" + + +# # Get kernel statistics from /proc/mdstat +# # This plugin ONLY supports Linux +# [[inputs.mdstat]] +# ## Sets file path +# ## If not specified, then default is /proc/mdstat +# # file_name = "/proc/mdstat" + + +# # Read metrics from one or many memcached servers. +# [[inputs.memcached]] +# # An array of address to gather stats about. Specify an ip on hostname +# # with optional port. ie localhost, 10.0.0.1:11211, etc. +# servers = ["localhost:11211"] +# # An array of unix memcached sockets to gather stats about. +# # unix_sockets = ["/var/run/memcached.sock"] +# +# ## Optional TLS Config +# # enable_tls = false +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## If false, skip chain & host verification +# # insecure_skip_verify = true + + +# # Telegraf plugin for gathering metrics from N Mesos masters +# [[inputs.mesos]] +# ## Timeout, in ms. +# timeout = 100 +# +# ## A list of Mesos masters. +# masters = ["http://localhost:5050"] +# +# ## Master metrics groups to be collected, by default, all enabled. +# master_collections = [ +# "resources", +# "master", +# "system", +# "agents", +# "frameworks", +# "framework_offers", +# "tasks", +# "messages", +# "evqueue", +# "registrar", +# "allocator", +# ] +# +# ## A list of Mesos slaves, default is [] +# # slaves = [] +# +# ## Slave metrics groups to be collected, by default, all enabled. +# # slave_collections = [ +# # "resources", +# # "agent", +# # "system", +# # "executors", +# # "tasks", +# # "messages", +# # ] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Collects scores from a Minecraft server's scoreboard using the RCON protocol +# [[inputs.minecraft]] +# ## Address of the Minecraft server. +# # server = "localhost" +# +# ## Server RCON Port. +# # port = "25575" +# +# ## Server RCON Password. +# password = "" +# +# ## Uncomment to remove deprecated metric components. +# # tagdrop = ["server"] + + +# # Generate metrics for test and demonstration purposes +# [[inputs.mock]] +# ## Set the metric name to use for reporting +# metric_name = "mock" +# +# ## Optional string key-value pairs of tags to add to all metrics +# # [inputs.mock.tags] +# # "key" = "value" +# +# ## One or more mock data fields *must* be defined. +# # [[inputs.mock.constant]] +# # name = "constant" +# # value = value_of_any_type +# # [[inputs.mock.random]] +# # name = "rand" +# # min = 1.0 +# # max = 6.0 +# # [[inputs.mock.sine_wave]] +# # name = "wave" +# # amplitude = 1.0 +# # period = 0.5 +# # phase = 20.0 +# # base_line = 0.0 +# # [[inputs.mock.step]] +# # name = "plus_one" +# # start = 0.0 +# # step = 1.0 +# # [[inputs.mock.stock]] +# # name = "abc" +# # price = 50.00 +# # volatility = 0.2 + + +# # Retrieve data from MODBUS slave devices +# [[inputs.modbus]] +# ## Connection Configuration +# ## +# ## The plugin supports connections to PLCs via MODBUS/TCP, RTU over TCP, ASCII over TCP or +# ## via serial line communication in binary (RTU) or readable (ASCII) encoding +# ## +# ## Device name +# name = "Device" +# +# ## Slave ID - addresses a MODBUS device on the bus +# ## Range: 0 - 255 [0 = broadcast; 248 - 255 = reserved] +# slave_id = 1 +# +# ## Timeout for each request +# timeout = "1s" +# +# ## Maximum number of retries and the time to wait between retries +# ## when a slave-device is busy. +# # busy_retries = 0 +# # busy_retries_wait = "100ms" +# +# # TCP - connect via Modbus/TCP +# controller = "tcp://localhost:502" +# +# ## Serial (RS485; RS232) +# ## For RS485 specific setting check the end of the configuration. +# ## For unix-like operating systems use: +# # controller = "file:///dev/ttyUSB0" +# ## For Windows operating systems use: +# # controller = "COM1" +# # baud_rate = 9600 +# # data_bits = 8 +# # parity = "N" +# # stop_bits = 1 +# +# ## Transmission mode for Modbus packets depending on the controller type. +# ## For Modbus over TCP you can choose between "TCP" , "RTUoverTCP" and +# ## "ASCIIoverTCP". +# ## For Serial controllers you can choose between "RTU" and "ASCII". +# ## By default this is set to "auto" selecting "TCP" for ModbusTCP connections +# ## and "RTU" for serial connections. +# # transmission_mode = "auto" +# +# ## Trace the connection to the modbus device +# # log_level = "trace" +# +# ## Define the configuration schema +# ## |---register -- define fields per register type in the original style (only supports one slave ID) +# ## |---request -- define fields on a requests base +# ## |---metric -- define fields on a metric base +# configuration_type = "register" +# +# ## Exclude the register type tag +# ## Please note, this will also influence the grouping of metrics as you won't +# ## see one metric per register type anymore! +# # exclude_register_type_tag = false +# ## --- "register" configuration style --- +# +# ## Measurements +# ## +# +# ## Digital Variables, Discrete Inputs and Coils +# ## measurement - the (optional) measurement name, defaults to "modbus" +# ## name - the variable name +# ## data_type - the (optional) output type, can be BOOL or UINT16 (default) +# ## address - variable address +# +# discrete_inputs = [ +# { name = "start", address = [0]}, +# { name = "stop", address = [1]}, +# { name = "reset", address = [2]}, +# { name = "emergency_stop", address = [3]}, +# ] +# coils = [ +# { name = "motor1_run", address = [0]}, +# { name = "motor1_jog", address = [1]}, +# { name = "motor1_stop", address = [2]}, +# ] +# +# ## Analog Variables, Input Registers and Holding Registers +# ## measurement - the (optional) measurement name, defaults to "modbus" +# ## name - the variable name +# ## byte_order - the ordering of bytes +# ## |---AB, ABCD - Big Endian +# ## |---BA, DCBA - Little Endian +# ## |---BADC - Mid-Big Endian +# ## |---CDAB - Mid-Little Endian +# ## data_type - BIT (single bit of a register) +# ## INT8L, INT8H, UINT8L, UINT8H (low and high byte variants) +# ## INT16, UINT16, INT32, UINT32, INT64, UINT64, +# ## FLOAT16-IEEE, FLOAT32-IEEE, FLOAT64-IEEE (IEEE 754 binary representation) +# ## FIXED, UFIXED (fixed-point representation on input) +# ## STRING (byte-sequence converted to string) +# ## bit - (optional) bit of the register, ONLY valid for BIT type +# ## scale - the final numeric variable representation +# ## address - variable address +# +# holding_registers = [ +# { name = "power_factor", byte_order = "AB", data_type = "FIXED", scale=0.01, address = [8]}, +# { name = "voltage", byte_order = "AB", data_type = "FIXED", scale=0.1, address = [0]}, +# { name = "energy", byte_order = "ABCD", data_type = "FIXED", scale=0.001, address = [5,6]}, +# { name = "current", byte_order = "ABCD", data_type = "FIXED", scale=0.001, address = [1,2]}, +# { name = "frequency", byte_order = "AB", data_type = "UFIXED", scale=0.1, address = [7]}, +# { name = "power", byte_order = "ABCD", data_type = "UFIXED", scale=0.1, address = [3,4]}, +# { name = "firmware", byte_order = "AB", data_type = "STRING", address = [5, 6, 7, 8, 9, 10, 11, 12]}, +# ] +# input_registers = [ +# { name = "tank_level", byte_order = "AB", data_type = "INT16", scale=1.0, address = [0]}, +# { name = "tank_ph", byte_order = "AB", data_type = "INT16", scale=1.0, address = [1]}, +# { name = "pump1_speed", byte_order = "ABCD", data_type = "INT32", scale=1.0, address = [3,4]}, +# ] +# +# ## --- "request" configuration style --- +# +# ## Per request definition +# ## +# +# ## Define a request sent to the device +# ## Multiple of those requests can be defined. Data will be collated into metrics at the end of data collection. +# [[inputs.modbus.request]] +# ## ID of the modbus slave device to query. +# ## If you need to query multiple slave-devices, create several "request" definitions. +# slave_id = 1 +# +# ## Byte order of the data. +# ## |---ABCD -- Big Endian (Motorola) +# ## |---DCBA -- Little Endian (Intel) +# ## |---BADC -- Big Endian with byte swap +# ## |---CDAB -- Little Endian with byte swap +# byte_order = "ABCD" +# +# ## Type of the register for the request +# ## Can be "coil", "discrete", "holding" or "input" +# register = "coil" +# +# ## Name of the measurement. +# ## Can be overridden by the individual field definitions. Defaults to "modbus" +# # measurement = "modbus" +# +# ## Request optimization algorithm. +# ## |---none -- Do not perform any optimization and use the given layout(default) +# ## |---shrink -- Shrink requests to actually requested fields +# ## | by stripping leading and trailing omits +# ## |---rearrange -- Rearrange request boundaries within consecutive address ranges +# ## | to reduce the number of requested registers by keeping +# ## | the number of requests. +# ## |---max_insert -- Rearrange request keeping the number of extra fields below the value +# ## provided in "optimization_max_register_fill". It is not necessary to define 'omitted' +# ## fields as the optimisation will add such field only where needed. +# # optimization = "none" +# +# ## Maximum number register the optimizer is allowed to insert between two fields to +# ## save requests. +# ## This option is only used for the 'max_insert' optimization strategy. +# ## NOTE: All omitted fields are ignored, so this option denotes the effective hole +# ## size to fill. +# # optimization_max_register_fill = 50 +# +# ## Field definitions +# ## Analog Variables, Input Registers and Holding Registers +# ## address - address of the register to query. For coil and discrete inputs this is the bit address. +# ## name *1 - field name +# ## type *1,2 - type of the modbus field, can be +# ## BIT (single bit of a register) +# ## INT8L, INT8H, UINT8L, UINT8H (low and high byte variants) +# ## INT16, UINT16, INT32, UINT32, INT64, UINT64 and +# ## FLOAT16, FLOAT32, FLOAT64 (IEEE 754 binary representation) +# ## STRING (byte-sequence converted to string) +# ## length *1,2 - (optional) number of registers, ONLY valid for STRING type +# ## bit *1,2 - (optional) bit of the register, ONLY valid for BIT type +# ## scale *1,2,4 - (optional) factor to scale the variable with +# ## output *1,3,4 - (optional) type of resulting field, can be INT64, UINT64 or FLOAT64. +# ## Defaults to FLOAT64 for numeric fields if "scale" is provided. +# ## Otherwise the input "type" class is used (e.g. INT* -> INT64). +# ## measurement *1 - (optional) measurement name, defaults to the setting of the request +# ## omit - (optional) omit this field. Useful to leave out single values when querying many registers +# ## with a single request. Defaults to "false". +# ## +# ## *1: These fields are ignored if field is omitted ("omit"=true) +# ## *2: These fields are ignored for both "coil" and "discrete"-input type of registers. +# ## *3: This field can only be "UINT16" or "BOOL" if specified for both "coil" +# ## and "discrete"-input type of registers. By default the fields are +# ## output as zero or one in UINT16 format unless "BOOL" is used. +# ## *4: These fields cannot be used with "STRING"-type fields. +# +# ## Coil / discrete input example +# fields = [ +# { address=0, name="motor1_run" }, +# { address=1, name="jog", measurement="motor" }, +# { address=2, name="motor1_stop", omit=true }, +# { address=3, name="motor1_overheating", output="BOOL" }, +# { address=4, name="firmware", type="STRING", length=8 }, +# ] +# +# [inputs.modbus.request.tags] +# machine = "impresser" +# location = "main building" +# +# [[inputs.modbus.request]] +# ## Holding example +# ## All of those examples will result in FLOAT64 field outputs +# slave_id = 1 +# byte_order = "DCBA" +# register = "holding" +# fields = [ +# { address=0, name="voltage", type="INT16", scale=0.1 }, +# { address=1, name="current", type="INT32", scale=0.001 }, +# { address=3, name="power", type="UINT32", omit=true }, +# { address=5, name="energy", type="FLOAT32", scale=0.001, measurement="W" }, +# { address=7, name="frequency", type="UINT32", scale=0.1 }, +# { address=8, name="power_factor", type="INT64", scale=0.01 }, +# ] +# +# [inputs.modbus.request.tags] +# machine = "impresser" +# location = "main building" +# +# [[inputs.modbus.request]] +# ## Input example with type conversions +# slave_id = 1 +# byte_order = "ABCD" +# register = "input" +# fields = [ +# { address=0, name="rpm", type="INT16" }, # will result in INT64 field +# { address=1, name="temperature", type="INT16", scale=0.1 }, # will result in FLOAT64 field +# { address=2, name="force", type="INT32", output="FLOAT64" }, # will result in FLOAT64 field +# { address=4, name="hours", type="UINT32" }, # will result in UIN64 field +# ] +# +# [inputs.modbus.request.tags] +# machine = "impresser" +# location = "main building" +# +# ## --- "metric" configuration style --- +# +# ## Per metric definition +# ## +# +# ## Request optimization algorithm across metrics +# ## |---none -- Do not perform any optimization and just group requests +# ## | within metrics (default) +# ## |---max_insert -- Collate registers across all defined metrics and fill in +# ## holes to optimize the number of requests. +# # optimization = "none" +# +# ## Maximum number of registers the optimizer is allowed to insert between +# ## non-consecutive registers to save requests. +# ## This option is only used for the 'max_insert' optimization strategy and +# ## effectively denotes the hole size between registers to fill. +# # optimization_max_register_fill = 50 +# +# ## Define a metric produced by the requests to the device +# ## Multiple of those metrics can be defined. The referenced registers will +# ## be collated into requests send to the device +# [[inputs.modbus.metric]] +# ## ID of the modbus slave device to query +# ## If you need to query multiple slave-devices, create several "metric" definitions. +# slave_id = 1 +# +# ## Byte order of the data +# ## |---ABCD -- Big Endian (Motorola) +# ## |---DCBA -- Little Endian (Intel) +# ## |---BADC -- Big Endian with byte swap +# ## |---CDAB -- Little Endian with byte swap +# # byte_order = "ABCD" +# +# ## Name of the measurement +# # measurement = "modbus" +# +# ## Field definitions +# ## register - type of the modbus register, can be "coil", "discrete", +# ## "holding" or "input". Defaults to "holding". +# ## address - address of the register to query. For coil and discrete inputs this is the bit address. +# ## name - field name +# ## type *1 - type of the modbus field, can be +# ## BIT (single bit of a register) +# ## INT8L, INT8H, UINT8L, UINT8H (low and high byte variants) +# ## INT16, UINT16, INT32, UINT32, INT64, UINT64 and +# ## FLOAT16, FLOAT32, FLOAT64 (IEEE 754 binary representation) +# ## STRING (byte-sequence converted to string) +# ## length *1 - (optional) number of registers, ONLY valid for STRING type +# ## bit *1,2 - (optional) bit of the register, ONLY valid for BIT type +# ## scale *1,3 - (optional) factor to scale the variable with +# ## output *2,3 - (optional) type of resulting field, can be INT64, UINT64 or FLOAT64. Defaults to FLOAT64 if +# ## "scale" is provided and to the input "type" class otherwise (INT* -> INT64, etc). +# ## +# ## *1: These fields are ignored for both "coil" and "discrete"-input type of registers. +# ## *2: This field can only be "UINT16" or "BOOL" if specified for both "coil" +# ## and "discrete"-input type of registers. By default the fields are +# ## output as zero or one in UINT16 format unless "BOOL" is used. +# ## *3: These fields cannot be used with "STRING"-type fields. +# fields = [ +# { register="coil", address=0, name="door_open"}, +# { register="coil", address=1, name="status_ok"}, +# { register="holding", address=0, name="voltage", type="INT16" }, +# { address=1, name="current", type="INT32", scale=0.001 }, +# { address=5, name="energy", type="FLOAT32", scale=0.001 }, +# { address=7, name="frequency", type="UINT32", scale=0.1 }, +# { address=8, name="power_factor", type="INT64", scale=0.01 }, +# { address=9, name="firmware", type="STRING", length=8 }, +# ] +# +# ## Tags assigned to the metric +# # [inputs.modbus.metric.tags] +# # machine = "impresser" +# # location = "main building" +# +# +# ## RS485 specific settings. Only take effect for serial controllers. +# ## Note: This has to be at the end of the modbus configuration due to +# ## TOML constraints. +# # [inputs.modbus.rs485] +# ## Delay RTS prior to sending +# # delay_rts_before_send = "0ms" +# ## Delay RTS after to sending +# # delay_rts_after_send = "0ms" +# ## Pull RTS line to high during sending +# # rts_high_during_send = false +# ## Pull RTS line to high after sending +# # rts_high_after_send = false +# ## Enabling receiving (Rx) during transmission (Tx) +# # rx_during_tx = false +# +# ## Enable workarounds required by some devices to work correctly +# # [inputs.modbus.workarounds] +# ## Pause after connect delays the first request by the specified time. +# ## This might be necessary for (slow) devices. +# # pause_after_connect = "0ms" +# +# ## Pause between read requests sent to the device. +# ## This might be necessary for (slow) serial devices. +# # pause_between_requests = "0ms" +# +# ## Close the connection after every gather cycle. +# ## Usually the plugin closes the connection after a certain idle-timeout, +# ## however, if you query a device with limited simultaneous connectivity +# ## (e.g. serial devices) from multiple instances you might want to only +# ## stay connected during gather and disconnect afterwards. +# # close_connection_after_gather = false +# +# ## Force the plugin to read each field in a separate request. +# ## This might be necessary for devices not conforming to the spec, +# ## see https://github.com/influxdata/telegraf/issues/12071. +# # one_request_per_field = false +# +# ## Enforce the starting address to be zero for the first request on +# ## coil registers. This is necessary for some devices see +# ## https://github.com/influxdata/telegraf/issues/8905 +# # read_coils_starting_at_zero = false +# +# ## String byte-location in registers AFTER byte-order conversion +# ## Some device (e.g. EM340) place the string byte in only the upper or +# ## lower byte location of a register see +# ## https://github.com/influxdata/telegraf/issues/14748 +# ## Available settings: +# ## lower -- use only lower byte of the register (00XX 00XX 00XX 00XX) +# ## upper -- use only upper byte of the register (XX00 XX00 XX00 XX00) +# ## By default both bytes of the register are used (XXXX XXXX). +# # string_register_location = "" + + +# # Read metrics and status information about processes managed by Monit +# [[inputs.monit]] +# ## Monit HTTPD address +# address = "http://127.0.0.1:2812" +# +# ## Username and Password for Monit +# # username = "" +# # password = "" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Aggregates the contents of multiple files into a single point +# [[inputs.multifile]] +# ## Base directory where telegraf will look for files. +# ## Omit this option to use absolute paths. +# base_dir = "/sys/bus/i2c/devices/1-0076/iio:device0" +# +# ## If true discard all data when a single file can't be read. +# ## Else, Telegraf omits the field generated from this file. +# # fail_early = true +# +# ## Files to parse each interval. +# [[inputs.multifile.file]] +# file = "in_pressure_input" +# dest = "pressure" +# conversion = "float" +# [[inputs.multifile.file]] +# file = "in_temp_input" +# dest = "temperature" +# conversion = "float(3)" +# [[inputs.multifile.file]] +# file = "in_humidityrelative_input" +# dest = "humidityrelative" +# conversion = "float(3)" + + +# # Read metrics from one or many mysql servers +# [[inputs.mysql]] +# ## specify servers via a url matching: +# ## [username[:password]@][protocol[(address)]]/[?tls=[true|false|skip-verify|custom]] +# ## see https://github.com/go-sql-driver/mysql#dsn-data-source-name +# ## e.g. +# ## servers = ["user:passwd@tcp(127.0.0.1:3306)/?tls=false"] +# ## servers = ["user@tcp(127.0.0.1:3306)/?tls=false"] +# # +# ## If no servers are specified, then localhost is used as the host. +# servers = ["tcp(127.0.0.1:3306)/"] +# +# ## Selects the metric output format. +# ## +# ## This option exists to maintain backwards compatibility, if you have +# ## existing metrics do not set or change this value until you are ready to +# ## migrate to the new format. +# ## +# ## If you do not have existing metrics from this plugin set to the latest +# ## version. +# ## +# ## Telegraf >=1.6: metric_version = 2 +# ## <1.6: metric_version = 1 (or unset) +# metric_version = 2 +# +# ## if the list is empty, then metrics are gathered from all database tables +# # table_schema_databases = [] +# +# ## gather metrics from INFORMATION_SCHEMA.TABLES for databases provided +# ## in the list above +# # gather_table_schema = false +# +# ## gather thread state counts from INFORMATION_SCHEMA.PROCESSLIST +# # gather_process_list = false +# +# ## gather user statistics from INFORMATION_SCHEMA.USER_STATISTICS +# # gather_user_statistics = false +# +# ## gather auto_increment columns and max values from information schema +# # gather_info_schema_auto_inc = false +# +# ## gather metrics from INFORMATION_SCHEMA.INNODB_METRICS +# # gather_innodb_metrics = false +# +# ## gather metrics from all channels from SHOW SLAVE STATUS command output +# # gather_all_slave_channels = false +# +# ## gather metrics from SHOW SLAVE STATUS command output +# # gather_slave_status = false +# +# ## gather metrics from SHOW REPLICA STATUS command output +# # gather_replica_status = false +# +# ## use SHOW ALL SLAVES STATUS command output for MariaDB +# ## use SHOW ALL REPLICAS STATUS command if enable gather replica status +# # mariadb_dialect = false +# +# ## gather metrics from SHOW BINARY LOGS command output +# # gather_binary_logs = false +# +# ## gather metrics from SHOW GLOBAL VARIABLES command output +# # gather_global_variables = true +# +# ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_TABLE +# # gather_table_io_waits = false +# +# ## gather metrics from PERFORMANCE_SCHEMA.TABLE_LOCK_WAITS +# # gather_table_lock_waits = false +# +# ## gather metrics from PERFORMANCE_SCHEMA.TABLE_IO_WAITS_SUMMARY_BY_INDEX_USAGE +# # gather_index_io_waits = false +# +# ## gather metrics from PERFORMANCE_SCHEMA.EVENT_WAITS +# # gather_event_waits = false +# +# ## gather metrics from PERFORMANCE_SCHEMA.FILE_SUMMARY_BY_EVENT_NAME +# # gather_file_events_stats = false +# +# ## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_DIGEST +# # gather_perf_events_statements = false +# # +# ## gather metrics from PERFORMANCE_SCHEMA.EVENTS_STATEMENTS_SUMMARY_BY_ACCOUNT_BY_EVENT_NAME +# # gather_perf_sum_per_acc_per_event = false +# # +# ## list of events to be gathered for gather_perf_sum_per_acc_per_event +# ## in case of empty list all events will be gathered +# # perf_summary_events = [] +# +# ## the limits for metrics form perf_events_statements +# # perf_events_statements_digest_text_limit = 120 +# # perf_events_statements_limit = 250 +# # perf_events_statements_time_limit = 86400 +# +# ## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES) +# ## example: interval_slow = "30m" +# # interval_slow = "" +# +# ## Optional TLS Config (used if tls=custom parameter specified in server uri) +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Provides metrics about the state of a NATS server +# # This plugin does NOT support FreeBSD +# [[inputs.nats]] +# ## The address of the monitoring endpoint of the NATS server +# server = "http://localhost:8222" +# +# ## Maximum time to receive response +# # response_timeout = "5s" + + +# # Neptune Apex data collector +# [[inputs.neptune_apex]] +# ## The Neptune Apex plugin reads the publicly available status.xml data from a local Apex. +# ## Measurements will be logged under "apex". +# +# ## The base URL of the local Apex(es). If you specify more than one server, they will +# ## be differentiated by the "source" tag. +# servers = [ +# "http://apex.local", +# ] +# +# ## The response_timeout specifies how long to wait for a reply from the Apex. +# #response_timeout = "5s" +# + + +# # Gather metrics about network interfaces +# [[inputs.net]] +# ## By default, telegraf gathers stats from any up interface (excluding loopback) +# ## Setting interfaces will tell it to gather these explicit interfaces, +# ## regardless of status. When specifying an interface, glob-style +# ## patterns are also supported. +# # interfaces = ["eth*", "enp0s[0-1]", "lo"] + + +# # Collect response time of a TCP or UDP connection +# [[inputs.net_response]] +# ## Protocol, must be "tcp" or "udp" +# ## NOTE: because the "udp" protocol does not respond to requests, it requires +# ## a send/expect string pair (see below). +# protocol = "tcp" +# ## Server address (default localhost) +# address = "localhost:80" +# +# ## Set timeout +# # timeout = "1s" +# +# ## Set read timeout (only used if expecting a response) +# # read_timeout = "1s" +# +# ## The following options are required for UDP checks. For TCP, they are +# ## optional. The plugin will send the given string to the server and then +# ## expect to receive the given 'expect' string back. +# ## string sent to the server +# # send = "ssh" +# ## expected string in answer +# # expect = "ssh" +# +# ## Uncomment to remove deprecated fields; recommended for new deploys +# # fieldexclude = ["result_type", "string_found"] + + +# # Read TCP metrics such as established, time wait and sockets counts. +# [[inputs.netstat]] +# # no configuration + + +# # Read per-mount NFS client metrics from /proc/self/mountstats +# [[inputs.nfsclient]] +# ## Read more low-level metrics (optional, defaults to false) +# # fullstat = false +# +# ## List of mounts to explicitly include or exclude (optional) +# ## The pattern (Go regexp) is matched against the mount point (not the +# ## device being mounted). If include_mounts is set, all mounts are ignored +# ## unless present in the list. If a mount is listed in both include_mounts +# ## and exclude_mounts, it is excluded. Go regexp patterns can be used. +# # include_mounts = [] +# # exclude_mounts = [] +# +# ## List of operations to include or exclude from collecting. This applies +# ## only when fullstat=true. Semantics are similar to {include,exclude}_mounts: +# ## the default is to collect everything; when include_operations is set, only +# ## those OPs are collected; when exclude_operations is set, all are collected +# ## except those listed. If include and exclude are set, the OP is excluded. +# ## See /proc/self/mountstats for a list of valid operations; note that +# ## NFSv3 and NFSv4 have different lists. While it is not possible to +# ## have different include/exclude lists for NFSv3/4, unused elements +# ## in the list should be okay. It is possible to have different lists +# ## for different mountpoints: use multiple [[input.nfsclient]] stanzas, +# ## with their own lists. See "include_mounts" above, and be careful of +# ## duplicate metrics. +# # include_operations = [] +# # exclude_operations = [] + + +# [[inputs.nftables]] +# ## Use the specified binary which will be looked-up in PATH +# # binary = "nft" +# +# ## Use sudo for command execution, can be restricted to +# ## "nft --json list table" +# # use_sudo = false +# +# ## Tables to monitor (may use "family table" format, e.g., "inet filter") +# # tables = [ "filter" ] +# +# ## Kinds of objects to monitor: "counters" (named counters), "sets", +# ## (named sets), "anonymous-counters" (on commented rules). +# # include = ["anonymous-counters"] + + +# # Read Nginx's basic status information (ngx_http_stub_status_module) +# [[inputs.nginx]] +# ## An array of Nginx stub_status URI to gather stats. +# urls = ["http://localhost/server_status", "http+unix:///var/run/nginx.sock:/server_status"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## HTTP response timeout (default: 5s) +# response_timeout = "5s" + + +# # Read Nginx Plus' advanced status information +# [[inputs.nginx_plus]] +# ## An array of Nginx status URIs to gather stats. +# urls = ["http://localhost/status", "http+unix:///var/run/nginx.sock:/status"] +# +# # HTTP response timeout (default: 5s) +# response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read Nginx Plus API advanced status information +# [[inputs.nginx_plus_api]] +# ## An array of Nginx API URIs to gather stats. +# urls = ["http://localhost/api", "http+unix:///var/run/nginx.sock:/api"] +# # Nginx API version, default: 3 +# # api_version = 3 +# +# # HTTP response timeout (default: 5s) +# response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read Nginx virtual host traffic status module information (nginx-module-sts) +# [[inputs.nginx_sts]] +# ## An array of ngx_http_status_module or status URI to gather stats. +# urls = ["http://localhost/status", "http+unix:///var/run/nginx.sock:/status"] +# +# ## HTTP response timeout (default: 5s) +# response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read nginx_upstream_check module status information (https://github.com/yaoweibin/nginx_upstream_check_module) +# [[inputs.nginx_upstream_check]] +# ## An URL where Nginx Upstream check module is enabled +# ## It should be set to return a JSON formatted response +# url = "http://127.0.0.1/status?format=json" +# ## You can also point it at a unix socket too +# # url = "http+unix:///var/run/nginx.sock:/status?format=json" +# +# ## HTTP method +# # method = "GET" +# +# ## Optional HTTP headers +# # headers = {"X-Special-Header" = "Special-Value"} +# +# ## Override HTTP "Host" header +# # host_header = "check.example.com" +# +# ## Timeout for HTTP requests +# timeout = "5s" +# +# ## Optional HTTP Basic Auth credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read Nginx virtual host traffic status module information (nginx-module-vts) +# [[inputs.nginx_vts]] +# ## An array of ngx_http_status_module or status URI to gather stats. +# urls = ["http://localhost/status", "http+unix:///var/run/nginx.sock:/status"] +# +# ## HTTP response timeout (default: 5s) +# response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from the Nomad API +# [[inputs.nomad]] +# ## URL for the Nomad agent +# # url = "http://127.0.0.1:4646" +# +# ## Set response_timeout (default 5 seconds) +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile + + +# # A plugin to collect stats from the NSD DNS resolver +# [[inputs.nsd]] +# ## Address of server to connect to, optionally ':port'. Defaults to the +# ## address in the nsd config file. +# server = "127.0.0.1:8953" +# +# ## If running as a restricted user you can prepend sudo for additional access: +# # use_sudo = false +# +# ## The default location of the nsd-control binary can be overridden with: +# # binary = "/usr/sbin/nsd-control" +# +# ## The default location of the nsd config file can be overridden with: +# # config_file = "/etc/nsd/nsd.conf" +# +# ## The default timeout of 1s can be overridden with: +# # timeout = "1s" + + +# # Read NSQ topic and channel statistics. +# [[inputs.nsq]] +# ## An array of NSQD HTTP API endpoints +# endpoints = ["http://localhost:4151"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Collect kernel snmp counters and network interface statistics +# [[inputs.nstat]] +# ## file paths for proc files. If empty default paths will be used: +# ## /proc/net/netstat, /proc/net/snmp, /proc/net/snmp6 +# ## These can also be overridden with env variables, see README. +# proc_net_netstat = "/proc/net/netstat" +# proc_net_snmp = "/proc/net/snmp" +# proc_net_snmp6 = "/proc/net/snmp6" +# ## dump metrics with 0 values too +# dump_zeros = true + + +# # Get standard NTP query metrics, requires ntpq executable. +# [[inputs.ntpq]] +# ## Servers to query with ntpq. +# ## If no server is given, the local machine is queried. +# # servers = [] +# +# ## Options to pass to the ntpq command. +# # options = "-p" +# +# ## Output format for the 'reach' field. +# ## Available values are +# ## octal -- output as is in octal representation e.g. 377 (default) +# ## decimal -- convert value to decimal representation e.g. 371 -> 249 +# ## count -- count the number of bits in the value. This represents +# ## the number of successful reaches, e.g. 37 -> 5 +# ## ratio -- output the ratio of successful attempts e.g. 37 -> 5/8 = 0.625 +# # reach_format = "octal" + + +# # Retrieve data from OPCUA devices +# [[inputs.opcua]] +# ## Metric name +# # name = "opcua" +# +# ## OPC UA Endpoint URL +# # endpoint = "opc.tcp://localhost:4840" +# +# ## Maximum time allowed to establish a connect to the endpoint. +# # connect_timeout = "10s" +# +# ## Maximum time allowed for a request over the established connection. +# # request_timeout = "5s" +# +# ## Maximum time that a session shall remain open without activity. +# # session_timeout = "20m" +# +# ## Retry options for failing reads e.g. due to invalid sessions +# ## If the retry count is zero, the read will fail after the initial attempt. +# # read_retry_timeout = "100ms" +# # read_retry_count = 0 +# +# ## Number of consecutive errors before forcing a reconnection +# ## If set to 1 (default), the client will reconnect after a single failed read +# # reconnect_error_threshold = 1 +# +# ## Security policy, one of "None", "Basic128Rsa15", "Basic256", +# ## "Basic256Sha256", or "auto" +# # security_policy = "auto" +# +# ## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto" +# # security_mode = "auto" +# +# ## Path to client certificate and private key files, must be specified together. +# ## If none of the options are specified, a temporary self-signed certificate +# ## will be created. If the options are specified but the files do not exist, a +# ## self-signed certificate will be created and stored permanently at the +# ## given locations. +# # certificate = "/etc/telegraf/cert.pem" +# # private_key = "/etc/telegraf/key.pem" +# +# ## Path to additional, explicitly trusted certificate for the remote endpoint +# # remote_certificate = "/etc/telegraf/opcua_server_cert.pem" +# +# ## Authentication Method, one of "Certificate", "UserName", or "Anonymous". To +# ## authenticate using a specific ID, select 'Certificate' or 'UserName' +# # auth_method = "Anonymous" +# +# ## Username and password required for auth_method = "UserName" +# # username = "" +# # password = "" +# +# ## Option to select the metric timestamp to use. Valid options are: +# ## "gather" -- uses the time of receiving the data in telegraf +# ## "server" -- uses the timestamp provided by the server +# ## "source" -- uses the timestamp provided by the source +# # timestamp = "gather" +# +# ## Client trace messages +# ## When set to true, and debug mode enabled in the agent settings, the OPCUA +# ## client's messages are included in telegraf logs. These messages are very +# ## noisey, but essential for debugging issues. +# # client_trace = false +# +# ## Include additional Fields in each metric +# ## Available options are: +# ## DataType -- OPC-UA Data Type (string) +# # optional_fields = [] +# +# ## Node ID configuration +# ## name - field name to use in the output +# ## id - OPC UA node ID string (e.g., "ns=0;i=2262" or "nsu=http://...;s=Name") +# ## namespace - OPC UA namespace of the node (integer value 0 thru 3) +# ## namespace_uri - OPC UA namespace URI (alternative to namespace for stable references) +# ## identifier_type - OPC UA ID type (s=string, i=numeric, g=guid, b=opaque) +# ## identifier - OPC UA ID (tag as shown in opcua browser) +# ## default_tags - extra tags to be added to the output metric (optional) +# ## +# ## Use EITHER 'id' OR the combination of 'namespace/namespace_uri' + 'identifier_type' + 'identifier' +# ## Use either the inline notation or the bracketed notation, not both. +# +# ## Inline notation using id string (recommended for simplicity) +# # nodes = [ +# # {name="ProductUri", id="ns=0;i=2262"}, +# # {name="ServerState", id="ns=0;i=2259"}, +# # ] +# +# ## Inline notation using individual fields (default_tags not supported yet) +# # nodes = [ +# # {name="", namespace="", identifier_type="", identifier=""}, +# # ] +# +# ## Bracketed notation using id string +# # [[inputs.opcua.nodes]] +# # name = "ProductUri" +# # id = "ns=0;i=2262" +# # default_tags = { tag1 = "value1", tag2 = "value2" } +# +# ## Bracketed notation using individual fields +# # [[inputs.opcua.nodes]] +# # name = "node1" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # default_tags = { tag1 = "value1", tag2 = "value2" } +# # +# # [[inputs.opcua.nodes]] +# # name = "node2" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # +# # [[inputs.opcua.nodes]] +# # name = "node3" +# # namespace_uri = "http://opcfoundation.org/UA/" +# # identifier_type = "" +# # identifier = "" +# +# ## Node Group +# ## Sets defaults so they aren't required in every node. +# ## Default values can be set for: +# ## * Metric name +# ## * OPC UA namespace +# ## * Identifier +# ## * Default tags +# ## +# ## Multiple node groups are allowed +# #[[inputs.opcua.group]] +# ## Group Metric name. Overrides the top level name. If unset, the +# ## top level name is used. +# # name = +# +# ## Group default namespace. If a node in the group doesn't set its +# ## namespace, this is used. +# # namespace = +# +# ## Group default namespace URI. Alternative to namespace for stable references. +# ## If a node in the group doesn't set its namespace_uri, this is used. +# # namespace_uri = +# +# ## Group default identifier type. If a node in the group doesn't set its +# ## identifier_type, this is used. +# # identifier_type = +# +# ## Default tags that are applied to every node in this group. Can be +# ## overwritten in a node by setting a different value for the tag name. +# ## example: default_tags = { tag1 = "value1" } +# # default_tags = {} +# +# ## Node ID Configuration. Array of nodes with the same settings as above. +# ## Use either the inline notation or the bracketed notation, not both. +# +# ## Inline notation (default_tags not supported yet) +# # nodes = [ +# # {name="node1", namespace="", identifier_type="", identifier=""}, +# # {name="node2", namespace="", identifier_type="", identifier=""}, +# #] +# +# ## Bracketed notation +# # [[inputs.opcua.group.nodes]] +# # name = "node1" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # default_tags = { tag1 = "override1", tag2 = "value2" } +# # +# # [[inputs.opcua.group.nodes]] +# # name = "node2" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# +# ## Enable workarounds required by some devices to work correctly +# # [inputs.opcua.workarounds] +# # ## Set additional valid status codes, StatusOK (0x0) is always considered valid +# # # additional_valid_status_codes = ["0xC0"] +# +# # [inputs.opcua.request_workarounds] +# # ## Use unregistered reads instead of registered reads +# # # use_unregistered_reads = false + + +# # OpenLDAP cn=Monitor plugin +# [[inputs.openldap]] +# host = "localhost" +# port = 389 +# +# # ldaps, starttls, or no encryption. default is an empty string, disabling all encryption. +# # note that port will likely need to be changed to 636 for ldaps +# # valid options: "" | "starttls" | "ldaps" +# tls = "" +# +# # skip peer certificate verification. Default is false. +# insecure_skip_verify = false +# +# # Path to PEM-encoded Root certificate to use to verify server certificate +# tls_ca = "/etc/ssl/certs.pem" +# +# # dn/password to bind with. If bind_dn is empty, an anonymous bind is performed. +# bind_dn = "" +# bind_password = "" +# +# # reverse metric names so they sort more naturally +# # Defaults to false if unset, but is set to true when generating a new config +# reverse_metric_names = true + + +# # Get standard NTP query metrics from OpenNTPD. +# [[inputs.openntpd]] +# ## Run ntpctl binary with sudo. +# # use_sudo = false +# +# ## Location of the ntpctl binary. +# # binary = "/usr/sbin/ntpctl" +# +# ## Maximum time the ntpctl binary is allowed to run. +# # timeout = "5s" + + +# # Derive metrics from aggregating OpenSearch query results +# [[inputs.opensearch_query]] +# ## OpenSearch cluster endpoint(s). Multiple urls can be specified as part +# ## of the same cluster. Only one successful call will be made per interval. +# urls = [ "https://node1.os.example.com:9200" ] # required. +# +# ## OpenSearch client timeout, defaults to "5s". +# # timeout = "5s" +# +# ## HTTP basic authentication details +# # username = "admin" +# # password = "admin" +# +# ## Skip TLS validation. Useful for local testing and self-signed certs. +# # insecure_skip_verify = false +# +# [[inputs.opensearch_query.aggregation]] +# ## measurement name for the results of the aggregation query +# measurement_name = "measurement" +# +# ## OpenSearch index or index pattern to search +# index = "index-*" +# +# ## The date/time field in the OpenSearch index (mandatory). +# date_field = "@timestamp" +# +# ## If the field used for the date/time field in OpenSearch is also using +# ## a custom date/time format it may be required to provide the format to +# ## correctly parse the field. +# ## +# ## If using one of the built in OpenSearch formats this is not required. +# ## https://opensearch.org/docs/2.4/opensearch/supported-field-types/date/#built-in-formats +# # date_field_custom_format = "" +# +# ## Time window to query (eg. "1m" to query documents from last minute). +# ## Normally should be set to same as collection interval +# query_period = "1m" +# +# ## Lucene query to filter results +# # filter_query = "*" +# +# ## Fields to aggregate values (must be numeric fields) +# # metric_fields = ["metric"] +# +# ## Aggregation function to use on the metric fields +# ## Must be set if 'metric_fields' is set +# ## Valid values are: avg, sum, min, max, sum +# # metric_function = "avg" +# +# ## Fields to be used as tags. Must be text, non-analyzed fields. Metric +# ## aggregations are performed per tag +# # tags = ["field.keyword", "field2.keyword"] +# +# ## Set to true to not ignore documents when the tag(s) above are missing +# # include_missing_tag = false +# +# ## String value of the tag when the tag does not exist +# ## Required when include_missing_tag is true +# # missing_tag_value = "null" + + +# # A plugin to collect stats from Opensmtpd - a validating, recursive, and caching DNS resolver +# [[inputs.opensmtpd]] +# ## If running as a restricted user you can prepend sudo for additional access: +# #use_sudo = false +# +# ## The default location of the smtpctl binary can be overridden with: +# binary = "/usr/sbin/smtpctl" +# +# # The default timeout of 1s can be overridden with: +# #timeout = "1s" + + +# # Read current weather and forecasts data from openweathermap.org +# [[inputs.openweathermap]] +# ## OpenWeatherMap API key. +# app_id = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" +# +# ## City ID's to collect weather data from. +# city_id = ["5391959"] +# +# ## Language of the description field. Can be one of "ar", "bg", +# ## "ca", "cz", "de", "el", "en", "fa", "fi", "fr", "gl", "hr", "hu", +# ## "it", "ja", "kr", "la", "lt", "mk", "nl", "pl", "pt", "ro", "ru", +# ## "se", "sk", "sl", "es", "tr", "ua", "vi", "zh_cn", "zh_tw" +# # lang = "en" +# +# ## APIs to fetch; can contain "weather" or "forecast". +# # fetch = ["weather", "forecast"] +# +# ## OpenWeatherMap base URL +# # base_url = "https://api.openweathermap.org/" +# +# ## Timeout for HTTP response. +# # response_timeout = "5s" +# +# ## Preferred unit system for temperature and wind speed. Can be one of +# ## "metric", "imperial", or "standard". +# ## The default is "metric" if not specified. +# # units = "metric" +# +# ## Style to query the current weather; available options +# ## batch -- query multiple cities at once using the "group" endpoint +# ## individual -- query each city individually using the "weather" endpoint +# ## You should use "individual" here as it is documented and provides more +# ## frequent updates. The default is "batch" for backward compatibility. +# # query_style = "batch" +# +# ## Query interval to fetch data. +# ## By default the global 'interval' setting is used. You should override the +# ## interval here if the global setting is shorter than 10 minutes as +# ## OpenWeatherMap weather data is only updated every 10 minutes. +# # interval = "10m" + + +# # P4Runtime telemetry input plugin +# [[inputs.p4runtime]] +# ## Define the endpoint of P4Runtime gRPC server to collect metrics. +# # endpoint = "127.0.0.1:9559" +# ## Set DeviceID required for Client Arbitration. +# ## https://p4.org/p4-spec/p4runtime/main/P4Runtime-Spec.html#sec-client-arbitration-and-controller-replication +# # device_id = 1 +# ## Filter counters by their names that should be observed. +# ## Example: counter_names_include=["ingressCounter", "egressCounter"] +# # counter_names_include = [] +# +# ## Optional TLS Config. +# ## Enable client-side TLS and define CA to authenticate the device. +# # enable_tls = false +# # tls_ca = "/etc/telegraf/ca.crt" +# ## Set minimal TLS version to accept by the client. +# # tls_min_version = "TLS12" +# ## Use TLS but skip chain & host verification. +# # insecure_skip_verify = true +# +# ## Define client-side TLS certificate & key to authenticate to the device. +# # tls_cert = "/etc/telegraf/client.crt" +# # tls_key = "/etc/telegraf/client.key" + + +# # Read metrics of passenger using passenger-status +# [[inputs.passenger]] +# ## Path of passenger-status. +# ## +# ## Plugin gather metric via parsing XML output of passenger-status +# ## More information about the tool: +# ## https://www.phusionpassenger.com/library/admin/apache/overall_status_report.html +# ## +# ## If no path is specified, then the plugin simply execute passenger-status +# ## hopefully it can be found in your PATH +# command = "passenger-status -v --show=xml" + + +# # Gather counters from PF +# [[inputs.pf]] +# ## PF require root access on most systems. +# ## Setting 'use_sudo' to true will make use of sudo to run pfctl. +# ## Users must configure sudo to allow telegraf user to run pfctl with no password. +# ## pfctl can be restricted to only list command "pfctl -s info". +# use_sudo = false + + +# # Read metrics of phpfpm, via HTTP status page or socket +# [[inputs.phpfpm]] +# ## An array of addresses to gather stats about. Specify an ip or hostname +# ## with optional port and path +# ## +# ## Plugin can be configured in three modes (either can be used): +# ## - http: the URL must start with http:// or https://, ie: +# ## "http://localhost/status" +# ## "http://192.168.130.1/status?full" +# ## +# ## - unixsocket: path to fpm socket, ie: +# ## "/var/run/php5-fpm.sock" +# ## or using a custom fpm status path: +# ## "/var/run/php5-fpm.sock:fpm-custom-status-path" +# ## glob patterns are also supported: +# ## "/var/run/php*.sock" +# ## +# ## - fcgi: the URL must start with fcgi:// or cgi://, and port must be present, ie: +# ## "fcgi://10.0.0.12:9000/status" +# ## "cgi://10.0.10.12:9001/status" +# ## +# ## Example of multiple gathering from local socket and remote host +# ## urls = ["http://192.168.1.20/status", "/tmp/fpm.sock"] +# urls = ["http://localhost/status"] +# +# ## Format of stats to parse, set to "status" or "json" +# ## If the user configures the URL to return JSON (e.g. +# ## http://localhost/status?json), set to JSON. Otherwise, will attempt to +# ## parse line-by-line. The JSON mode will produce additional metrics. +# # format = "status" +# +# ## Duration allowed to complete HTTP requests. +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Ping given url(s) and return statistics +# [[inputs.ping]] +# ## Hosts to send ping packets to. +# urls = ["example.org"] +# +# ## Method used for sending pings, can be either "exec" or "native". When set +# ## to "exec" the systems ping command will be executed. When set to "native" +# ## the plugin will send pings directly. +# ## +# ## While the default is "exec" for backwards compatibility, new deployments +# ## are encouraged to use the "native" method for improved compatibility and +# ## performance. +# # method = "exec" +# +# ## Number of ping packets to send per interval. Corresponds to the "-c" +# ## option of the ping command. +# # count = 1 +# +# ## Time to wait between sending ping packets in seconds. Operates like the +# ## "-i" option of the ping command. +# # ping_interval = 1.0 +# +# ## If set, the time to wait for a ping response in seconds. Operates like +# ## the "-W" option of the ping command (for "exec" method only) +# # timeout = 1.0 +# +# ## If set, the total ping deadline, in seconds. Operates like the "-w" +# ## option of the ping command. Use this option to control timeout behavior +# ## when using the "native" method. +# # deadline = 10 +# +# ## Interface or source address to send ping from. Operates like the -I or -S +# ## option of the ping command. +# # interface = "" +# +# ## Percentiles to calculate. This only works with the native method. +# # percentiles = [50, 95, 99] +# +# ## Specify the ping executable binary. +# # binary = "ping" +# +# ## Arguments for ping command. When arguments is not empty, the command from +# ## the binary option will be used and other options (ping_interval, timeout, +# ## etc) will be ignored. +# # arguments = ["-c", "3"] +# +# ## Use only IPv4 addresses when resolving a hostname. By default, both IPv4 +# ## and IPv6 can be used. +# # ipv4 = false +# +# ## Use only IPv6 addresses when resolving a hostname. By default, both IPv4 +# ## and IPv6 can be used. +# # ipv6 = false +# +# ## Number of data bytes to be sent. Corresponds to the "-s" +# ## option of the ping command. This only works with the native method. +# # size = 56 + + +# # Measure postfix queue statistics +# # This plugin ONLY supports non-Windows +# [[inputs.postfix]] +# ## Postfix queue directory. If not provided, telegraf will try to use +# ## 'postconf -h queue_directory' to determine it. +# # queue_directory = "/var/spool/postfix" + + +# # Read metrics from one or many PowerDNS servers +# [[inputs.powerdns]] +# # An array of sockets to gather stats about. +# # Specify a path to unix socket. +# # +# # If no servers are specified, then '/var/run/pdns.controlsocket' is used as the path. +# unix_sockets = ["/var/run/pdns.controlsocket"] + + +# # Read metrics from one or many PowerDNS Recursor servers +# [[inputs.powerdns_recursor]] +# ## Path to the Recursor control socket. +# unix_sockets = ["/var/run/pdns_recursor.controlsocket"] +# +# ## Directory to create receive socket. This default is likely not writable, +# ## please reference the full plugin documentation for a recommended setup. +# # socket_dir = "/var/run/" +# ## Socket permissions for the receive socket. +# # socket_mode = "0666" +# +# ## The version of the PowerDNS control protocol to use. You will have to +# ## change this based on your PowerDNS Recursor version, see below: +# ## Version 1: PowerDNS <4.5.0 +# ## Version 2: PowerDNS 4.5.0 - 4.5.11 +# ## Version 3: PowerDNS >=4.6.0 +# ## By default this is set to 1. +# # control_protocol_version = 1 +# + + +# # Monitor process cpu and memory usage +# [[inputs.procstat]] +# ## PID file to monitor process +# pid_file = "/var/run/nginx.pid" +# ## executable name (ie, pgrep ) +# # exe = "nginx" +# ## pattern as argument for pgrep (ie, pgrep -f ) +# # pattern = "nginx" +# ## user as argument for pgrep (ie, pgrep -u ) +# # user = "nginx" +# ## Systemd unit name, supports globs when include_systemd_children is set to true +# # systemd_unit = "nginx.service" +# # include_systemd_children = false +# ## CGroup name or path, supports globs +# # cgroup = "systemd/system.slice/nginx.service" +# ## Supervisor service names of hypervisorctl management +# # supervisor_units = ["webserver", "proxy"] +# +# ## Windows service name +# # win_service = "" +# +# ## override for process_name +# ## This is optional; default is sourced from /proc//status +# # process_name = "bar" +# +# ## Field name prefix +# # prefix = "" +# +# ## Mode to use when calculating CPU usage. Can be one of 'solaris' or 'irix'. +# # mode = "irix" +# +# ## Add the given information tag instead of a field +# ## This allows to create unique metrics/series when collecting processes with +# ## otherwise identical tags. However, please be careful as this can easily +# ## result in a large number of series, especially with short-lived processes, +# ## creating high cardinality at the output. +# ## Available options are: +# ## cmdline -- full commandline +# ## pid -- ID of the process +# ## ppid -- ID of the process' parent +# ## status -- state of the process +# ## user -- username owning the process +# ## socket only options: +# ## protocol -- protocol type of the process socket +# ## state -- state of the process socket +# ## src -- source address of the process socket (non-unix sockets) +# ## src_port -- source port of the process socket (non-unix sockets) +# ## dest -- destination address of the process socket (non-unix sockets) +# ## dest_port -- destination port of the process socket (non-unix sockets) +# ## name -- name of the process socket (unix sockets only) +# ## Available for procstat_lookup: +# ## level -- level of the process filtering +# # tag_with = [] +# +# ## Properties to collect +# ## Available options are +# ## cpu -- CPU usage statistics +# ## limits -- set resource limits +# ## memory -- memory usage statistics +# ## mmap -- mapped memory usage statistics (caution: can cause high load) +# ## sockets -- socket statistics for protocols in 'socket_protocols' +# # properties = ["cpu", "limits", "memory", "mmap"] +# +# ## Protocol filter for the sockets property +# ## Available options are +# ## all -- all of the protocols below +# ## tcp4 -- TCP socket statistics for IPv4 +# ## tcp6 -- TCP socket statistics for IPv6 +# ## udp4 -- UDP socket statistics for IPv4 +# ## udp6 -- UDP socket statistics for IPv6 +# ## unix -- Unix socket statistics +# # socket_protocols = ["all"] +# +# ## Method to use when finding process IDs. Can be one of 'pgrep', or +# ## 'native'. The pgrep finder calls the pgrep executable in the PATH while +# ## the native finder performs the search directly in a manor dependent on the +# ## platform. Default is 'pgrep' +# # pid_finder = "pgrep" +# +# ## New-style filtering configuration (multiple filter sections are allowed) +# # [[inputs.procstat.filter]] +# # ## Name of the filter added as 'filter' tag +# # name = "shell" +# # +# # ## Service filters, only one is allowed +# # ## Systemd unit names (wildcards are supported) +# # # systemd_units = [] +# # ## CGroup name or path (wildcards are supported) +# # # cgroups = [] +# # ## Supervisor service names of hypervisorctl management +# # # supervisor_units = [] +# # ## Windows service names +# # # win_service = [] +# # +# # ## Process filters, multiple are allowed +# # ## Regular expressions to use for matching against the full command +# # # patterns = ['.*'] +# # ## List of users owning the process (wildcards are supported) +# # # users = ['*'] +# # ## List of executable paths of the process (wildcards are supported) +# # # executables = ['*'] +# # ## List of process names (wildcards are supported) +# # # process_names = ['*'] +# # ## Recursion depth for determining children of the matched processes +# # ## A negative value means all children with infinite depth +# # # recursion_depth = 0 + + +# # Provides metrics from Proxmox nodes (Proxmox Virtual Environment > 6.2). +# [[inputs.proxmox]] +# ## API connection configuration. The API token was introduced in Proxmox v6.2. +# ## Required permissions for user and token: PVEAuditor role on /. +# base_url = "https://localhost:8006/api2/json" +# api_token = "USER@REALM!TOKENID=UUID" +# +# ## Node name, defaults to OS hostname +# ## Unless Telegraf is on the same host as Proxmox, setting this is required. +# # node_name = "" +# +# ## Additional tags of the VM stats data to add as a tag +# ## Supported values are "vmid" and "status" +# # additional_vmstats_tags = [] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## HTTP response timeout (default: 5s) +# # response_timeout = "5s" + + +# # Reads last_run_summary.yaml file and converts to measurements +# [[inputs.puppetagent]] +# ## Location of puppet last run summary file +# location = "/var/lib/puppet/state/last_run_summary.yaml" + + +# # Reads metrics from RabbitMQ servers via the Management Plugin +# [[inputs.rabbitmq]] +# ## Management Plugin url. (default: http://localhost:15672) +# # url = "http://localhost:15672" +# +# ## Credentials +# # username = "guest" +# # password = "guest" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Optional request timeouts +# ## +# ## ResponseHeaderTimeout, if non-zero, specifies the amount of time to wait +# ## for a server's response headers after fully writing the request. +# # header_timeout = "3s" +# ## +# ## client_timeout specifies a time limit for requests made by this client. +# ## Includes connection time, any redirects, and reading the response body. +# # client_timeout = "4s" +# +# ## A list of nodes to gather as the rabbitmq_node measurement. If not +# ## specified, metrics for all nodes are gathered. +# # nodes = ["rabbit@node1", "rabbit@node2"] +# +# ## A list of exchanges to gather as the rabbitmq_exchange measurement. If not +# ## specified, metrics for all exchanges are gathered. +# # exchanges = ["telegraf"] +# +# ## Metrics to include and exclude. Globs accepted. +# ## Note that an empty array for both will include all metrics +# ## Currently the following metrics are supported: "exchange", "federation", "node", "overview", "queue" +# # metric_include = [] +# # metric_exclude = [] +# +# ## Queues to include and exclude. Globs accepted. +# ## Note that an empty array for both will include all queues +# # queue_name_include = [] +# # queue_name_exclude = [] +# +# ## Federation upstreams to include and exclude specified as an array of glob +# ## pattern strings. Federation links can also be limited by the queue and +# ## exchange filters. +# # federation_upstream_include = [] +# # federation_upstream_exclude = [] +# +# ## Include queue type as a tag. When enabled, adds a "type" tag to queue metrics +# ## with the queue type returned by RabbitMQ (e.g., "classic", "quorum", "stream"). +# ## Defaults to "classic" if empty. +# # include_queue_type_tag = false + + +# [[inputs.radius]] +# ## An array of Server IPs and ports to gather from. If none specified, defaults to localhost. +# servers = ["127.0.0.1:1812","hostname.domain.com:1812"] +# +# ## Credentials for radius authentication. +# username = "myuser" +# password = "mypassword" +# secret = "mysecret" +# +# ## Request source server IP, normally the server running telegraf. +# ## This corresponds to Radius' NAS-IP-Address. +# # request_ip = "127.0.0.1" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" + + +# # Read raindrops stats (raindrops - real-time stats for preforking Rack servers) +# [[inputs.raindrops]] +# ## An array of raindrops middleware URI to gather stats. +# urls = ["http://localhost:8080/_raindrops"] + + +# # Reads metrics from RavenDB servers via the Monitoring Endpoints +# [[inputs.ravendb]] +# ## Node URL and port that RavenDB is listening on. By default, +# ## attempts to connect securely over HTTPS, however, if the user +# ## is running a local unsecure development cluster users can use +# ## HTTP via a URL like "http://localhost:8080" +# url = "https://localhost:4433" +# +# ## RavenDB X509 client certificate setup +# # tls_cert = "/etc/telegraf/raven.crt" +# # tls_key = "/etc/telegraf/raven.key" +# +# ## Optional request timeout +# ## +# ## Timeout, specifies the amount of time to wait +# ## for a server's response headers after fully writing the request and +# ## time limit for requests made by this client +# # timeout = "5s" +# +# ## List of statistics which are collected +# # At least one is required +# # Allowed values: server, databases, indexes, collections +# # +# # stats_include = ["server", "databases", "indexes", "collections"] +# +# ## List of db where database stats are collected +# ## If empty, all db are concerned +# # db_stats_dbs = [] +# +# ## List of db where index status are collected +# ## If empty, all indexes from all db are concerned +# # index_stats_dbs = [] +# +# ## List of db where collection status are collected +# ## If empty, all collections from all db are concerned +# # collection_stats_dbs = [] + + +# # Read CPU, Fans, Powersupply and Voltage metrics of hardware server through redfish APIs +# [[inputs.redfish]] +# ## Redfish API Base URL. +# address = "https://127.0.0.1:5000" +# +# ## Credentials for the Redfish API. Can also use secrets. +# username = "root" +# password = "password123456" +# +# ## System Id to collect data for in Redfish APIs. +# computer_system_id="System.Embedded.1" +# +# ## Metrics to collect +# ## The metric collects to gather. Choose from "power" and "thermal". +# # include_metrics = ["power", "thermal"] +# +# ## Tag sets allow you to include redfish OData link parent data +# ## For Example. +# ## Thermal data is an OData link with parent Chassis which has a link of Location. +# ## For more info see the Redfish Resource and Schema Guide at DMTFs website. +# ## Available sets are: "chassis.location" and "chassis" +# # include_tag_sets = ["chassis.location"] +# +# ## Workarounds +# ## Defines workarounds for certain hardware vendors. Choose from: +# ## * ilo4-thermal - Do not pass 0Data-Version header to Thermal endpoint +# # workarounds = [] +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from one or many redis-sentinel servers +# [[inputs.redis_sentinel]] +# ## specify servers via a url matching: +# ## [protocol://][username:password]@address[:port] +# ## e.g. +# ## tcp://localhost:26379 +# ## tcp://username:password@192.168.99.100 +# ## unix:///var/run/redis-sentinel.sock +# ## +# ## If no servers are specified, then localhost is used as the host. +# ## If no port is specified, 26379 is used +# # servers = ["tcp://localhost:26379"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = true + + +# # Read metrics from one or many RethinkDB servers +# [[inputs.rethinkdb]] +# ## An array of URI to gather stats about. Specify an ip or hostname +# ## with optional port add password. ie, +# ## rethinkdb://user:auth_key@10.10.3.30:28105, +# ## rethinkdb://10.10.3.33:18832, +# ## For rethinkdb v2.3.0+ with username/password authorization you should use +# ## rethinkdb2://username:password@127.0.0.1:28015" +# servers = ["127.0.0.1:28015"] + + +# # Read metrics one or many Riak servers +# [[inputs.riak]] +# # Specify a list of one or more riak http servers +# servers = ["http://localhost:8098"] + + +# # Read API usage and limits for a Salesforce organisation +# [[inputs.salesforce]] +# ## specify your credentials +# ## +# username = "your_username" +# password = "your_password" +# ## +# ## (optional) security token +# # security_token = "your_security_token" +# ## +# ## (optional) environment type (sandbox or production) +# ## default is: production +# ## +# # environment = "production" +# ## +# ## (optional) API version (default: "39.0") +# ## +# # version = "39.0" + + +# # Monitor sensors, requires lm-sensors package +# # This plugin ONLY supports Linux +# [[inputs.sensors]] +# ## Remove numbers from field names. +# ## If true, a field name like 'temp1_input' will be changed to 'temp_input'. +# # remove_numbers = true +# +# ## Timeout is the maximum amount of time that the sensors command can run. +# # timeout = "5s" + + +# # Get slab statistics from procfs +# # This plugin ONLY supports Linux +# [[inputs.slab]] +# # no configuration - please see the plugin's README for steps to configure +# # sudo properly + + +# # Gather SLURM metrics +# [[inputs.slurm]] +# ## Slurmrestd URL. Both http and https can be used as schemas. +# url = "http://127.0.0.1:6820" +# +# ## Credentials for JWT-based authentication. +# # username = "foo" +# # token = "topSecret" +# +# ## Enabled endpoints +# ## List of endpoints a user can acquire data from. +# ## Available values are: diag, jobs, nodes, partitions, reservations. +# # enabled_endpoints = ["diag", "jobs", "nodes", "partitions", "reservations"] +# +# ## Maximum time to receive a response. If set to 0s, the +# ## request will not time out. +# # response_timeout = "5s" +# +# ## Optional TLS Config. Note these options will only +# ## be taken into account when the scheme specififed on +# ## the URL parameter is https. They will be silently +# ## ignored otherwise. +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from storage devices supporting S.M.A.R.T. +# [[inputs.smart]] +# ## Optionally specify the path to the smartctl executable +# # path_smartctl = "/usr/bin/smartctl" +# +# ## Optionally specify the path to the nvme-cli executable +# # path_nvme = "/usr/bin/nvme" +# +# ## Optionally specify if vendor specific attributes should be propagated for NVMe disk case +# ## ["auto-on"] - automatically find and enable additional vendor specific disk info +# ## ["vendor1", "vendor2", ...] - e.g. "Intel" enable additional Intel specific disk info +# # enable_extensions = ["auto-on"] +# +# ## On most platforms used cli utilities requires root access. +# ## Setting 'use_sudo' to true will make use of sudo to run smartctl or nvme-cli. +# ## Sudo must be configured to allow the telegraf user to run smartctl or nvme-cli +# ## without a password. +# # use_sudo = false +# +# ## Adds an extra tag "device_type", which can be used to differentiate +# ## multiple disks behind the same controller (e.g., MegaRAID). +# # tag_with_device_type = false +# +# ## Skip checking disks in this power mode. Defaults to +# ## "standby" to not wake up disks that have stopped rotating. +# ## See --nocheck in the man pages for smartctl. +# ## smartctl version 5.41 and 5.42 have faulty detection of +# ## power mode and might require changing this value to +# ## "never" depending on your disks. +# # nocheck = "standby" +# +# ## Gather all returned S.M.A.R.T. attribute metrics and the detailed +# ## information from each drive into the 'smart_attribute' measurement. +# # attributes = false +# +# ## Optionally specify devices to exclude from reporting if disks auto-discovery is performed. +# # excludes = [ "/dev/pass6" ] +# +# ## Optionally specify devices and device type, if unset +# ## a scan (smartctl --scan and smartctl --scan -d nvme) for S.M.A.R.T. devices will be done +# ## and all found will be included except for the excluded in excludes. +# # devices = [ "/dev/ada0 -d atacam", "/dev/nvme0"] +# +# ## Timeout for the cli command to complete. +# # timeout = "30s" +# +# ## Optionally call smartctl and nvme-cli with a specific concurrency policy. +# ## By default, smartctl and nvme-cli are called in separate threads (goroutines) to gather disk attributes. +# ## Some devices (e.g. disks in RAID arrays) may have access limitations that require sequential reading of +# ## SMART data - one individual array drive at the time. In such case please set this configuration option +# ## to "sequential" to get readings for all drives. +# ## valid options: concurrent, sequential +# # read_method = "concurrent" + + +# # Read metrics from SMART storage devices using smartclt's JSON output +# [[inputs.smartctl]] +# ## Optionally specify the path to the smartctl executable +# # path = "/usr/sbin/smartctl" +# +# ## Use sudo +# ## On most platforms used, smartctl requires root access. Setting 'use_sudo' +# ## to true will make use of sudo to run smartctl. Sudo must be configured to +# ## allow the telegraf user to run smartctl without a password. +# # use_sudo = false +# +# ## Devices to include or exclude +# ## By default, the plugin will use all devices found in the output of +# ## `smartctl --scan-open`. Only one option is allowed at a time. If set, include +# ## sets the specific devices to scan, while exclude omits specific devices. +# # devices_include = [] +# # devices_exclude = [] +# +# ## Skip checking disks in specified power mode +# ## Defaults to "standby" to not wake up disks that have stopped rotating. +# ## For full details on the options here, see the --nocheck section in the +# ## smartctl man page. Choose from: +# ## * never: always check the device +# ## * sleep: check the device unless it is in sleep mode +# ## * standby: check the device unless it is in sleep or standby mode +# ## * idle: check the device unless it is in sleep, standby, or idle mode +# # nocheck = "standby" +# +# ## Timeout for the cli command to complete +# # timeout = "30s" + + +# # Retrieves SNMP values from remote agents +# [[inputs.snmp]] +# ## Agent addresses to retrieve values from. +# ## format: agents = [":"] +# ## scheme: optional, either udp, udp4, udp6, tcp, tcp4, tcp6. +# ## default is udp +# ## port: optional +# ## example: agents = ["udp://127.0.0.1:161"] +# ## agents = ["tcp://127.0.0.1:161"] +# ## agents = ["udp4://v4only-snmp-agent"] +# agents = ["udp://127.0.0.1:161"] +# +# ## Timeout for each request. +# # timeout = "5s" +# +# ## Stop polling tables if polling fails on the same agent +# # stop_on_error = false +# +# ## SNMP version; can be 1, 2, or 3. +# # version = 2 +# +# ## Unconnected UDP socket +# ## When true, SNMP responses are accepted from any address not just +# ## the requested address. This can be useful when gathering from +# ## redundant/failover systems. +# # unconnected_udp_socket = false +# +# ## Path to mib files +# ## Used by the gosmi translator. +# ## To add paths when translating with netsnmp, use the MIBDIRS environment variable +# # path = ["/usr/share/snmp/mibs"] +# +# ## SNMP community string. +# # community = "public" +# +# ## Agent host tag; should be set to "source" for consistent usage across plugins +# ## example: agent_host_tag = "source" +# ## The default value is inconsistent with other plugins. Users will get a +# ## warning that can be ignored if this is not changed. However, to have a +# ## consistent experience, set this to "source" in your config to align with +# ## other plugins. +# # agent_host_tag = "agent_host" +# +# ## Number of retries to attempt. +# # retries = 3 +# +# ## The GETBULK max-repetitions parameter. +# # max_repetitions = 10 +# +# ## SNMPv3 authentication and encryption options. +# ## +# ## Security Name. +# # sec_name = "myuser" +# ## Authentication protocol; one of "MD5", "SHA", "SHA224", "SHA256", "SHA384", "SHA512" or "". +# # auth_protocol = "MD5" +# ## Authentication password. +# # auth_password = "pass" +# ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". +# # sec_level = "authNoPriv" +# ## Context Name. +# # context_name = "" +# ## Privacy protocol used for encrypted messages; one of "DES", "AES", "AES192", "AES192C", "AES256", "AES256C", or "". +# ### Protocols "AES192", "AES192", "AES256", and "AES256C" require the underlying net-snmp tools +# ### to be compiled with --enable-blumenthal-aes (http://www.net-snmp.org/docs/INSTALL.html) +# # priv_protocol = "" +# ## Privacy password used for encrypted messages. +# # priv_password = "" +# +# ## Add fields and tables defining the variables you wish to collect. This +# ## example collects the system uptime and interface variables. Reference the +# ## full plugin documentation for configuration details. +# [[inputs.snmp.field]] +# oid = "RFC1213-MIB::sysUpTime.0" +# name = "sysUptime" +# conversion = "float(2)" +# +# [[inputs.snmp.field]] +# oid = "RFC1213-MIB::sysName.0" +# name = "sysName" +# is_tag = true +# +# [[inputs.snmp.table]] +# oid = "IF-MIB::ifTable" +# name = "interface" +# inherit_tags = ["sysName"] +# +# [[inputs.snmp.table.field]] +# oid = "IF-MIB::ifDescr" +# name = "ifDescr" +# is_tag = true + + +# # Gather indicators from established connections, using iproute2's ss command. +# # This plugin ONLY supports non-Windows +# [[inputs.socketstat]] +# ## ss can display information about tcp, udp, raw, unix, packet, dccp and sctp sockets +# ## Specify here the types you want to gather +# protocols = [ "tcp", "udp" ] +# +# ## The default timeout of 1s for ss execution can be overridden here: +# # timeout = "1s" + + +# # Gather timeseries from Google Cloud Platform v3 monitoring API +# [[inputs.stackdriver]] +# ## GCP Project +# project = "erudite-bloom-151019" +# +# ## Include timeseries that start with the given metric type. +# metric_type_prefix_include = [ +# "compute.googleapis.com/", +# ] +# +# ## Exclude timeseries that start with the given metric type. +# # metric_type_prefix_exclude = [] +# +# ## Most metrics are updated no more than once per minute; it is recommended +# ## to override the agent level interval with a value of 1m or greater. +# interval = "1m" +# +# ## Maximum number of API calls to make per second. The quota for accounts +# ## varies, it can be viewed on the API dashboard: +# ## https://cloud.google.com/monitoring/quotas#quotas_and_limits +# # rate_limit = 14 +# +# ## The delay and window options control the number of points selected on +# ## each gather. When set, metrics are gathered between: +# ## start: now() - delay - window +# ## end: now() - delay +# # +# ## Collection delay; if set too low metrics may not yet be available. +# # delay = "5m" +# # +# ## If unset, the window will start at 1m and be updated dynamically to span +# ## the time between calls (approximately the length of the plugin interval). +# # window = "1m" +# +# ## TTL for cached list of metric types. This is the maximum amount of time +# ## it may take to discover new metrics. +# # cache_ttl = "1h" +# +# ## If true, raw bucket counts are collected for distribution value types. +# ## For a more lightweight collection, you may wish to disable and use +# ## distribution_aggregation_aligners instead. +# # gather_raw_distribution_buckets = true +# +# ## Aggregate functions to be used for metrics whose value type is +# ## distribution. These aggregate values are recorded in in addition to raw +# ## bucket counts; if they are enabled. +# ## +# ## For a list of aligner strings see: +# ## https://cloud.google.com/monitoring/api/ref_v3/rpc/google.monitoring.v3#aligner +# # distribution_aggregation_aligners = [ +# # "ALIGN_PERCENTILE_99", +# # "ALIGN_PERCENTILE_95", +# # "ALIGN_PERCENTILE_50", +# # ] +# +# ## Filters can be added to reduce the number of time series matched. All +# ## functions are supported: starts_with, ends_with, has_substring, and +# ## one_of. Only the '=' operator is supported. +# ## +# ## The logical operators when combining filters are defined statically using +# ## the following values: +# ## filter ::= {AND AND AND } +# ## resource_labels ::= {OR } +# ## metric_labels ::= {OR } +# ## user_labels ::= {OR } +# ## system_labels ::= {OR } +# ## +# ## For more details, see https://cloud.google.com/monitoring/api/v3/filters +# # +# ## Resource labels refine the time series selection with the following expression: +# ## resource.labels. = +# # [[inputs.stackdriver.filter.resource_labels]] +# # key = "instance_name" +# # value = 'starts_with("localhost")' +# # +# ## Metric labels refine the time series selection with the following expression: +# ## metric.labels. = +# # [[inputs.stackdriver.filter.metric_labels]] +# # key = "device_name" +# # value = 'one_of("sda", "sdb")' +# # +# ## User labels refine the time series selection with the following expression: +# ## metadata.user_labels."" = +# # [[inputs.stackdriver.filter.user_labels]] +# # key = "environment" +# # value = 'one_of("prod", "staging")' +# # +# ## System labels refine the time series selection with the following expression: +# ## metadata.system_labels."" = +# # [[inputs.stackdriver.filter.system_labels]] +# # key = "machine_type" +# # value = 'starts_with("e2-")' + + +# # Gathers information about processes that running under supervisor using XML-RPC API +# [[inputs.supervisor]] +# ## Url of supervisor's XML-RPC endpoint if basic auth enabled in supervisor http server, +# ## than you have to add credentials to url (ex. http://login:pass@localhost:9001/RPC2) +# # url="http://localhost:9001/RPC2" +# ## With settings below you can manage gathering additional information about processes +# ## If both of them empty, then all additional information will be collected. +# ## Currently supported supported additional metrics are: pid, rc +# # metrics_include = [] + + +# # Get synproxy counter statistics from procfs +# # This plugin ONLY supports Linux +# [[inputs.synproxy]] +# # no configuration + + +# # Sysstat metrics collector +# # This plugin ONLY supports Linux +# [[inputs.sysstat]] +# ## Path to the sadc command. +# # +# ## Common Defaults: +# ## Debian/Ubuntu: /usr/lib/sysstat/sadc +# ## Arch: /usr/lib/sa/sadc +# ## RHEL/CentOS: /usr/lib64/sa/sadc +# sadc_path = "/usr/lib/sa/sadc" # required +# +# ## Path to the sadf command, if it is not in PATH +# # sadf_path = "/usr/bin/sadf" +# +# ## Activities is a list of activities, that are passed as argument to the +# ## sadc collector utility (e.g: DISK, SNMP etc...) +# ## The more activities that are added, the more data is collected. +# # activities = ["DISK"] +# +# ## Group metrics to measurements. +# ## +# ## If group is false each metric will be prefixed with a description +# ## and represents itself a measurement. +# ## +# ## If Group is true, corresponding metrics are grouped to a single measurement. +# # group = true +# +# ## Options for the sadf command. The values on the left represent the sadf options and +# ## the values on the right their description (which are used for grouping and prefixing metrics). +# ## +# ## Run 'sar -h' or 'man sar' to find out the supported options for your sysstat version. +# [inputs.sysstat.options] +# -C = "cpu" +# -B = "paging" +# -b = "io" +# -d = "disk" # requires DISK activity +# "-n ALL" = "network" +# "-P ALL" = "per_cpu" +# -q = "queue" +# -R = "mem" +# -r = "mem_util" +# -S = "swap_util" +# -u = "cpu_util" +# -v = "inode" +# -W = "swap" +# -w = "task" +# # -H = "hugepages" # only available for newer linux distributions +# # "-I ALL" = "interrupts" # requires INT activity +# +# ## Device tags can be used to add additional tags for devices. For example the configuration below +# ## adds a tag vg with value rootvg for all metrics with sda devices. +# # [[inputs.sysstat.device_tags.sda]] +# # vg = "rootvg" + + +# # Tacacs plugin collects successful tacacs authentication response times. +# [[inputs.tacacs]] +# ## An array of Server IPs (or hostnames) and ports to gather from. If none specified, defaults to localhost. +# # servers = ["127.0.0.1:49"] +# +# ## Request source server IP, normally the server running telegraf. +# # request_ip = "127.0.0.1" +# +# ## Credentials for tacacs authentication. +# username = "myuser" +# password = "mypassword" +# secret = "mysecret" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" + + +# # Reads metrics from a Teamspeak 3 Server via ServerQuery +# [[inputs.teamspeak]] +# ## Server address for Teamspeak 3 ServerQuery +# # server = "127.0.0.1:10011" +# ## Username for ServerQuery +# username = "serverqueryuser" +# ## Password for ServerQuery +# password = "secret" +# ## Nickname of the ServerQuery client +# nickname = "telegraf" +# ## Array of virtual servers +# # virtual_servers = [1] + + +# # Read metrics about temperature +# [[inputs.temp]] +# ## Desired output format (Linux only) +# ## Available values are +# ## v1 -- use pre-v1.22.4 sensor naming, e.g. coretemp_core0_input +# ## v2 -- use v1.22.4+ sensor naming, e.g. coretemp_core_0_input +# # metric_format = "v2" +# +# ## Add device tag to distinguish devices with the same name (Linux only) +# # add_device_tag = false + + +# # Read Tengine's basic status information (ngx_http_reqstat_module) +# [[inputs.tengine]] +# ## An array of Tengine reqstat module URI to gather stats. +# urls = ["http://127.0.0.1/us"] +# +# ## HTTP response timeout (default: 5s) +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read time metrics from linux timex interface. +# [[inputs.timex]] +# ## No input configuration + + +# # Gather metrics from the Tomcat server status page. +# [[inputs.tomcat]] +# ## URL of the Tomcat server status +# # url = "http://127.0.0.1:8080/manager/status/all?XML=true" +# +# ## HTTP Basic Auth Credentials +# # username = "tomcat" +# # password = "s3cret" +# +# ## Request timeout +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Inserts sine and cosine waves for demonstration purposes +# [[inputs.trig]] +# ## Set the amplitude +# amplitude = 10.0 + + +# # Read Twemproxy stats data +# [[inputs.twemproxy]] +# ## Twemproxy stats address and port (no scheme) +# addr = "localhost:22222" +# ## Monitor pool name +# pools = ["redis_pool", "mc_pool"] + + +# # A plugin to collect stats from the Unbound DNS resolver +# [[inputs.unbound]] +# ## Address of server to connect to, read from unbound conf default, optionally ':port' +# ## Will lookup IP if given a hostname +# server = "127.0.0.1:8953" +# +# ## If running as a restricted user you can prepend sudo for additional access: +# # use_sudo = false +# +# ## The default location of the unbound-control binary can be overridden with: +# # binary = "/usr/sbin/unbound-control" +# +# ## The default location of the unbound config file can be overridden with: +# # config_file = "/etc/unbound/unbound.conf" +# +# ## The default timeout of 1s can be overridden with: +# # timeout = "1s" +# +# ## When set to true, thread metrics are tagged with the thread id. +# ## +# ## The default is false for backwards compatibility, and will be changed to +# ## true in a future version. It is recommended to set to true on new +# ## deployments. +# thread_as_tag = false +# +# ## Collect metrics with the histogram of the recursive query times: +# # histogram = false + + +# # Monitor UPSes connected via Network UPS Tools +# [[inputs.upsd]] +# ## A running NUT server to connect to. +# ## IPv6 addresses must be enclosed in brackets (e.g. "[::1]") +# # server = "127.0.0.1" +# # port = 3493 +# # username = "user" +# # password = "password" +# +# ## Force parsing numbers as floats +# ## It is highly recommended to enable this setting to parse numbers +# ## consistently as floats to avoid database conflicts where some numbers are +# ## parsed as integers and others as floats. +# # force_float = false +# +# ## Collect additional fields if they are available for the UPS +# ## The fields need to be specified as NUT variable names, see +# ## https://networkupstools.org/docs/developer-guide.chunked/apas02.html +# ## Wildcards are accepted. +# # additional_fields = [] +# +# ## Dump information for debugging +# ## Allows to print the raw variables (and corresponding types) as received +# ## from the NUT server ONCE for each UPS. +# ## Please attach this information when reporting issues! +# # log_level = "trace" + + +# # Read uWSGI metrics. +# [[inputs.uwsgi]] +# ## List with urls of uWSGI Stats servers. Url must match pattern: +# ## scheme://address[:port] +# ## +# ## For example: +# ## servers = ["tcp://localhost:5050", "http://localhost:1717", "unix:///tmp/statsock"] +# servers = ["tcp://127.0.0.1:1717"] +# +# ## General connection timeout +# # timeout = "5s" + + +# # A plugin to collect stats from Varnish HTTP Cache +# # This plugin ONLY supports non-Windows +# [[inputs.varnish]] +# ## If running as a restricted user you can prepend sudo for additional access: +# #use_sudo = false +# +# ## The default location of the varnishstat binary can be overridden with: +# binary = "/usr/bin/varnishstat" +# +# ## Additional custom arguments for the varnishstat command +# # binary_args = ["-f", "MAIN.*"] +# +# ## The default location of the varnishadm binary can be overridden with: +# adm_binary = "/usr/bin/varnishadm" +# +# ## Custom arguments for the varnishadm command +# # adm_binary_args = [""] +# +# ## Metric version defaults to metric_version=1, use metric_version=2 for removal of nonactive vcls +# ## Varnish 6.0.2 and newer is required for metric_version=2. +# metric_version = 1 +# +# ## Additional regexps to override builtin conversion of varnish metrics into telegraf metrics. +# ## Regexp group "_vcl" is used for extracting the VCL name. Metrics that contain nonactive VCL's are skipped. +# ## Regexp group "_field" overrides the field name. Other named regexp groups are used as tags. +# # regexps = ['^XCNT\.(?P<_vcl>[\w\-]*)(\.)*(?P[\w\-.+]*)\.(?P<_field>[\w\-.+]*)\.val'] +# +# ## By default, telegraf gather stats for 3 metric points. +# ## Setting stats will override the defaults shown below. +# ## Glob matching can be used, ie, stats = ["MAIN.*"] +# ## stats may also be set to ["*"], which will collect all stats +# stats = ["MAIN.cache_hit", "MAIN.cache_miss", "MAIN.uptime"] +# +# ## Optional name for the varnish instance (or working directory) to query +# ## Usually append after -n in varnish cli +# # instance_name = instanceName +# +# ## Timeout for varnishstat command +# # timeout = "1s" + + +# # Reads whois data and expose as metrics +# [[inputs.whois]] +# ## List of domains to query +# domains = ["example.com", "influxdata.com"] +# +# ## Use Custom WHOIS server +# # server = "whois.iana.org" +# +# ## Timeout for WHOIS queries +# # timeout = "30s" +# +# ## Enable WHOIS referral chain query +# # referral_chain_query = false + + +# # Input plugin to collect Windows Event Log messages +# # This plugin ONLY supports Windows +# [[inputs.win_eventlog]] +# ## Telegraf should have Administrator permissions to subscribe for some +# ## Windows Events channels (e.g. System log) +# +# ## LCID (Locale ID) for event rendering +# ## 1033 to force English language +# ## 0 to use default Windows locale +# # locale = 0 +# +# ## Name of eventlog, used only if xpath_query is empty +# ## Example: "Application" +# # eventlog_name = "" +# +# ## xpath_query can be in defined short form like "Event/System[EventID=999]" +# ## or you can form a XML Query. Refer to the Consuming Events article: +# ## https://docs.microsoft.com/en-us/windows/win32/wes/consuming-events +# ## XML query is the recommended form, because it is most flexible +# ## You can create or debug XML Query by creating Custom View in Windows Event Viewer +# ## and then copying resulting XML here +# xpath_query = ''' +# +# +# +# *[System[( (EventID >= 5152 and EventID <= 5158) or EventID=5379 or EventID=4672)]] +# +# +# +# +# +# +# +# +# +# +# +# +# +# +# ''' +# +# ## When true, event logs are read from the beginning; otherwise only future +# ## events will be logged. +# # from_beginning = false +# +# ## Number of events to fetch in one batch +# # event_batch_size = 5 +# +# # Process UserData XML to fields, if this node exists in Event XML +# # process_userdata = true +# +# # Process EventData XML to fields, if this node exists in Event XML +# # process_eventdata = true +# +# ## Separator character to use for unrolled XML Data field names +# # separator = "_" +# +# ## Get only first line of Message field. For most events first line is +# ## usually more than enough +# # only_first_line_of_message = true +# +# ## Parse timestamp from TimeCreated.SystemTime event field. +# ## Will default to current time of telegraf processing on parsing error or if +# ## set to false +# # timestamp_from_event = true +# +# ## System field names: +# ## "Source", "EventID", "Version", "Level", "Task", "Opcode", "Keywords", +# ## "TimeCreated", "EventRecordID", "ActivityID", "RelatedActivityID", +# ## "ProcessID", "ThreadID", "ProcessName", "Channel", "Computer", "UserID", +# ## "UserName", "Message", "LevelText", "TaskText", "OpcodeText" +# ## +# ## In addition to System, Data fields can be unrolled from additional XML +# ## nodes in event. Human-readable representation of those nodes is formatted +# ## into event Message field, but XML is more machine-parsable +# +# ## Event fields to include as tags +# ## The values below are included by default. +# ## Globbing supported (e.g. "Level*" matches both "Level" and "LevelText") +# # event_tags = ["Source", "EventID", "Level", "LevelText", "Task", "TaskText", "Opcode", "OpcodeText", "Keywords", "Channel", "Computer"] +# +# ## Event fields to include +# ## All fields are sent by default. +# ## Globbing supported (e.g. "Level*" matches both "Level" and "LevelText") +# # event_fields = ["*"] +# +# ## Event fields to exclude +# ## Note that if you exclude all fields then no metrics are produced. A valid +# ## metric includes at least one field. +# ## Globbing supported (e.g. "Level*" matches both "Level" and "LevelText") +# # exclude_fields = [] +# +# ## Event fields to exclude if their value is empty or equals to zero +# ## The values below are included by default. +# ## Globbing supported (e.g. "Level*" matches both "Level" and "LevelText") +# # exclude_empty = ["Task", "Opcode", "*ActivityID", "UserID"] +# +# ## Maximum memory size available for an event to render +# ## Events larger that that are not processed and will not create a metric. +# ## NOTE: As events are encoded in UTF-16 we need two bytes per character. +# # event_size_limit = "64KB" + + +# # Input plugin to counterPath Performance Counters on Windows operating systems +# # This plugin ONLY supports Windows +# [[inputs.win_perf_counters]] +# ## By default this plugin returns basic CPU and Disk statistics. See the +# ## README file for more examples. Uncomment examples below or write your own +# ## as you see fit. If the system being polled for data does not have the +# ## Object at startup of the Telegraf agent, it will not be gathered. +# +# ## Print All matching performance counters +# # PrintValid = false +# +# ## Whether request a timestamp along with the PerfCounter data or use current +# ## time +# # UsePerfCounterTime = true +# +# ## If UseWildcardsExpansion params is set to true, wildcards (partial +# ## wildcards in instance names and wildcards in counters names) in configured +# ## counter paths will be expanded and in case of localized Windows, counter +# ## paths will be also localized. It also returns instance indexes in instance +# ## names. If false, wildcards (not partial) in instance names will still be +# ## expanded, but instance indexes will not be returned in instance names. +# # UseWildcardsExpansion = false +# +# ## When running on a localized version of Windows and with +# ## UseWildcardsExpansion = true, Windows will localize object and counter +# ## names. When LocalizeWildcardsExpansion = false, use the names in +# ## object.Counters instead of the localized names. Only Instances can have +# ## wildcards in this case. ObjectName and Counters must not have wildcards +# ## when this setting is false. +# # LocalizeWildcardsExpansion = true +# +# ## Period after which counters will be reread from configuration and +# ## wildcards in counter paths expanded +# # CountersRefreshInterval="1m" +# +# ## Accepts a list of PDH error codes which are defined in pdh.go, if this +# ## error is encountered it will be ignored. For example, you can provide +# ## "PDH_NO_DATA" to ignore performance counters with no instances. By default +# ## no errors are ignored You can find the list here: +# ## https://github.com/influxdata/telegraf/blob/master/plugins/inputs/win_perf_counters/pdh.go +# ## e.g. IgnoredErrors = ["PDH_NO_DATA"] +# # IgnoredErrors = [] +# +# ## Maximum size of the buffer for values returned by the API +# ## Increase this value if you experience "buffer limit reached" errors. +# # MaxBufferSize = "4MiB" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# # [[inputs.win_perf_counters.object]] +# # Measurement = "" +# # ObjectName = "" +# # Instances = [""] +# # Counters = [] +# ## Additional Object Settings +# ## * IncludeTotal: set to true to include _Total instance when querying +# ## for all metrics via '*' +# ## * WarnOnMissing: print out when the performance counter is missing +# ## from object, counter or instance +# ## * UseRawValues: gather raw values instead of formatted. Raw values are +# ## stored in the field name with the "_Raw" suffix, e.g. +# ## "Disk_Read_Bytes_sec_Raw". +# # IncludeTotal = false +# # WarnOnMissing = false +# # UseRawValues = false +# +# ## Processor usage, alternative to native, reports on a per core. +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_cpu" +# # ObjectName = "Processor" +# # Instances = ["*"] +# # UseRawValues = true +# # Counters = [ +# # "% Idle Time", +# # "% Interrupt Time", +# # "% Privileged Time", +# # "% User Time", +# # "% Processor Time", +# # "% DPC Time", +# # ] +# +# ## Disk times and queues +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_disk" +# # ObjectName = "LogicalDisk" +# # Instances = ["*"] +# # Counters = [ +# # "% Idle Time", +# # "% Disk Time", +# # "% Disk Read Time", +# # "% Disk Write Time", +# # "% User Time", +# # "% Free Space", +# # "Current Disk Queue Length", +# # "Free Megabytes", +# # ] +# +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_diskio" +# # ObjectName = "PhysicalDisk" +# # Instances = ["*"] +# # Counters = [ +# # "Disk Read Bytes/sec", +# # "Disk Write Bytes/sec", +# # "Current Disk Queue Length", +# # "Disk Reads/sec", +# # "Disk Writes/sec", +# # "% Disk Time", +# # "% Disk Read Time", +# # "% Disk Write Time", +# # ] +# +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_net" +# # ObjectName = "Network Interface" +# # Instances = ["*"] +# # Counters = [ +# # "Bytes Received/sec", +# # "Bytes Sent/sec", +# # "Packets Received/sec", +# # "Packets Sent/sec", +# # "Packets Received Discarded", +# # "Packets Outbound Discarded", +# # "Packets Received Errors", +# # "Packets Outbound Errors", +# # ] +# +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_system" +# # ObjectName = "System" +# # Instances = ["------"] +# # Counters = [ +# # "Context Switches/sec", +# # "System Calls/sec", +# # "Processor Queue Length", +# # "System Up Time", +# # ] +# +# ## Example counterPath where the Instance portion must be removed to get +# ## data back, such as from the Memory object. +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_mem" +# # ObjectName = "Memory" +# ## Use 6 x - to remove the Instance bit from the counterPath. +# # Instances = ["------"] +# # Counters = [ +# # "Available Bytes", +# # "Cache Faults/sec", +# # "Demand Zero Faults/sec", +# # "Page Faults/sec", +# # "Pages/sec", +# # "Transition Faults/sec", +# # "Pool Nonpaged Bytes", +# # "Pool Paged Bytes", +# # "Standby Cache Reserve Bytes", +# # "Standby Cache Normal Priority Bytes", +# # "Standby Cache Core Bytes", +# # ] +# +# ## Example query where the Instance portion must be removed to get data back, +# ## such as from the Paging File object. +# # [[inputs.win_perf_counters.object]] +# # Measurement = "win_swap" +# # ObjectName = "Paging File" +# # Instances = ["_Total"] +# # Counters = [ +# # "% Usage", +# # ] + + +# # Input plugin to report Windows services info. +# # This plugin ONLY supports Windows +# [[inputs.win_services]] +# ## Names of the services to monitor. Leave empty to monitor all the available +# ## services on the host. Globs accepted. Case insensitive. +# service_names = [ +# "LanmanServer", +# "TermService", +# "Win*", +# ] +# +# # optional, list of service names to exclude +# excluded_service_names = ['WinRM'] + + +# # Input plugin to query Windows Management Instrumentation +# # This plugin ONLY supports Windows +# [[inputs.win_wmi]] +# ## Hostname or IP for remote connections, by default the local machine is queried +# # host = "" +# ## Credentials for the connection, by default no credentials are used +# # username = "" +# # password = "" +# +# ## WMI query to execute, multiple methods are possible +# [[inputs.win_wmi.query]] +# ## Namespace, class and a list of properties to use in the WMI query +# namespace = "root\\cimv2" +# class_name = "Win32_Volume" +# properties = ["Name", "Capacity", "FreeSpace"] +# ## Optional WHERE clause for the WQL query +# # filter = 'NOT Name LIKE "\\\\?\\%"' +# ## Returned properties to use as tags instead of fields +# # tag_properties = ["Name"] +# +# # ## WMI method to invoke, multiple methods are possible +# # [[inputs.win_wmi.method]] +# # ## WMI namespace, class and method to use +# # namespace = 'root\default' +# # class_name = "StdRegProv" +# # method = "GetStringValue" +# # ## Returned WMI method values to use as tags instead of fields +# # # tag_properties = ["ReturnValue"] +# # ## Named arguments for the method call +# # [inputs.win_wmi.method.arguments] +# # hDefKey = '2147483650' +# # sSubKeyName = 'Software\Microsoft\windows NT\CurrentVersion' +# # sValueName = 'ProductName' +# # ## Mapping of the name of the returned property to a field-name +# # [inputs.win_wmi.method.fields] +# # sValue = "product_name" + + +# # Collect Wireguard server interface and peer statistics +# [[inputs.wireguard]] +# ## Optional list of Wireguard device/interface names to query. +# ## If omitted, all Wireguard interfaces are queried. +# # devices = ["wg0"] + + +# # Monitor wifi signal strength and quality +# # This plugin ONLY supports Linux +# [[inputs.wireless]] +# ## Sets 'proc' directory path +# ## If not specified, then default is /proc +# # host_proc = "/proc" + + +# # Reads metrics from a SSL certificate +# [[inputs.x509_cert]] +# ## List certificate sources, support wildcard expands for files +# ## Prefix your entry with 'file://' if you intend to use relative paths +# sources = ["tcp://example.org:443", "https://influxdata.com:443", +# "smtp://mail.localhost:25", "udp://127.0.0.1:4433", +# "/etc/ssl/certs/ssl-cert-snakeoil.pem", +# "/etc/mycerts/*.mydomain.org.pem", "file:///path/to/*.pem", +# "jks:///etc/mycerts/keystore.jks", +# "pkcs12:///etc/mycerts/keystore.p12", +# "wincertstore://machine:ROOT", "wincertstore://user:CA"] +# +# ## Timeout for SSL connection +# # timeout = "5s" +# +# ## Pass a different name into the TLS request (Server Name Indication). +# ## This is synonymous with tls_server_name, and only one of the two +# ## options may be specified at one time. +# ## example: server_name = "myhost.example.org" +# # server_name = "myhost.example.org" +# +# ## Only output the leaf certificates and omit the root ones. +# # exclude_root_certs = false +# +# ## Pad certificate serial number with zeroes to 128-bits. +# # pad_serial_with_zeroes = false +# +# ## Password to be used with PKCS#12 or JKS files +# # password = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# # tls_server_name = "myhost.example.org" +# +# ## Set the proxy URL +# # use_proxy = true +# # proxy_url = "http://localhost:8888" + + +# # Gathers Metrics From a Dell EMC XtremIO Storage Array's V3 API +# [[inputs.xtremio]] +# ## XtremIO User Interface Endpoint +# url = "https://xtremio.example.com/" # required +# +# ## Credentials +# username = "user1" +# password = "pass123" +# +# ## Metrics to collect from the XtremIO +# # collectors = ["bbus","clusters","ssds","volumes","xms"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use SSL but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics of ZFS from arcstats, zfetchstats, vdev_cache_stats, pools and datasets +# # This plugin ONLY supports Linux & FreeBSD +# [[inputs.zfs]] +# ## ZFS kstat path. Ignored on FreeBSD +# ## If not specified, then default is: +# # kstatPath = "/proc/spl/kstat/zfs" +# +# ## By default, telegraf gather all zfs stats +# ## Override the stats list using the kstatMetrics array: +# ## For FreeBSD, the default is: +# # kstatMetrics = ["arcstats", "zfetchstats", "vdev_cache_stats"] +# ## For Linux, the default is: +# # kstatMetrics = ["abdstats", "arcstats", "dnodestats", "dbufcachestats", +# # "dmu_tx", "fm", "vdev_mirror_stats", "zfetchstats", "zil"] +# +# ## By default, don't gather zpool stats +# # poolMetrics = false +# +# ## By default, don't gather dataset stats +# # datasetMetrics = false +# +# ## Report fields as the type defined by ZFS (Linux only) +# ## This is disabled for backward compatibility but is STRONGLY RECOMMENDED +# ## to be enabled to avoid overflows. This requires UINT support on the output +# ## for most fields. +# ## useNativeTypes = false + + +# # Reads 'mntr' stats from one or many zookeeper servers +# [[inputs.zookeeper]] +# ## An array of address to gather stats about. Specify an ip or hostname +# ## with port. ie localhost:2181, 10.0.0.1:2181, etc. +# +# ## If no servers are specified, then localhost is used as the host. +# ## If no port is specified, 2181 is used +# servers = [":2181"] +# +# ## Timeout for metric collections from all servers. Minimum timeout is "1s". +# # timeout = "5s" +# +# ## Float Parsing - the initial implementation forced any value unable to be +# ## parsed as an int to be a string. Setting this to "float" will attempt to +# ## parse float values as floats and not strings. This would break existing +# ## metrics and may cause issues if a value switches between a float and int. +# # parse_floats = "string" +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +############################################################################### +# SERVICE INPUT PLUGINS # +############################################################################### + + +# # Pull Metric Statistics from Aliyun CMS +# [[inputs.aliyuncms]] +# ## Aliyun Credentials +# ## Credentials are loaded in the following order +# ## 1) Ram RoleArn credential +# ## 2) AccessKey STS token credential +# ## 3) AccessKey credential +# ## 4) Ecs Ram Role credential +# ## 5) RSA keypair credential +# ## 6) Environment variables credential +# ## 7) Instance metadata credential +# +# # access_key_id = "" +# # access_key_secret = "" +# # access_key_sts_token = "" +# # role_arn = "" +# # role_session_name = "" +# # private_key = "" +# # public_key_id = "" +# # role_name = "" +# +# ## Specify ali cloud regions to be queried for metric and object discovery +# ## If not set, all supported regions (see below) would be covered, it can +# ## provide a significant load on API, so the recommendation here is to +# ## limit the list as much as possible. +# ## Allowed values: https://www.alibabacloud.com/help/zh/doc-detail/40654.htm +# ## Default supported regions are: +# ## cn-qingdao,cn-beijing,cn-zhangjiakou,cn-huhehaote,cn-hangzhou, +# ## cn-shanghai, cn-shenzhen, cn-heyuan,cn-chengdu,cn-hongkong, +# ## ap-southeast-1,ap-southeast-2,ap-southeast-3,ap-southeast-5, +# ## ap-south-1,ap-northeast-1, us-west-1,us-east-1,eu-central-1, +# ## eu-west-1,me-east-1 +# ## +# ## From discovery perspective it set the scope for object discovery, +# ## the discovered info can be used to enrich the metrics with objects +# ## attributes/tags. Discovery is not supported for all projects. +# ## Currently, discovery supported for the following projects: +# ## - acs_ecs_dashboard +# ## - acs_rds_dashboard +# ## - acs_slb_dashboard +# ## - acs_vpc_eip +# regions = ["cn-hongkong"] +# +# ## Requested AliyunCMS aggregation Period (required) +# ## The period must be multiples of 60s and the minimum for AliyunCMS metrics +# ## is 1 minute (60s). However not all metrics are made available to the +# ## one minute period. Some are collected at 3 minute, 5 minute, or larger +# ## intervals. +# ## See: https://help.aliyun.com/document_detail/51936.html?spm=a2c4g.11186623.2.18.2bc1750eeOw1Pv +# ## Note that if a period is configured that is smaller than the minimum for +# ## a particular metric, that metric will not be returned by Aliyun's +# ## OpenAPI and will not be collected by Telegraf. +# period = "5m" +# +# ## Collection Delay (required) +# ## The delay must account for metrics availability via AliyunCMS API. +# delay = "1m" +# +# ## Recommended: use metric 'interval' that is a multiple of 'period' +# ## to avoid gaps or overlap in pulled data +# interval = "5m" +# +# ## Metric Statistic Project (required) +# project = "acs_slb_dashboard" +# +# ## Maximum requests per second, default value is 200 +# ratelimit = 200 +# +# ## How often the discovery API call executed (default 1m) +# #discovery_interval = "1m" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Metrics to Pull +# ## At least one metrics definition required +# [[inputs.aliyuncms.metrics]] +# ## Metrics names to be requested, +# ## Description can be found here (per project): +# ## https://help.aliyun.com/document_detail/28619.html?spm=a2c4g.11186623.6.690.1938ad41wg8QSq +# names = ["InstanceActiveConnection", "InstanceNewConnection"] +# +# ## Dimension filters for Metric (optional) +# ## This allows to get additional metric dimension. If dimension is not +# ## specified it can be returned or the data can be aggregated - it depends +# ## on particular metric, you can find details here: +# ## https://help.aliyun.com/document_detail/28619.html?spm=a2c4g.11186623.6.690.1938ad41wg8QSq +# ## +# ## Note, that by default dimension filter includes the list of discovered +# ## objects in scope (if discovery is enabled). Values specified here would +# ## be added into the list of discovered objects. You can specify either +# ## single dimension: +# # dimensions = '{"instanceId": "p-example"}' +# +# ## Or you can specify several dimensions at once: +# # dimensions = '[{"instanceId": "p-example"},{"instanceId": "q-example"}]' +# +# ## Tag Query Path +# ## The following tags added by default: +# ## * regionId (if discovery enabled) +# ## * userId +# ## * instanceId +# ## Enrichment tags, can be added from discovery (if supported) +# ## Notation is +# ## : +# ## To figure out which fields are available, consult the +# ## Describe API per project. For example, for SLB see: +# ## https://api.aliyun.com/#/?product=Slb&version=2014-05-15&api=DescribeLoadBalancers¶ms={}&tab=MOCK&lang=GO +# # tag_query_path = [ +# # "address:Address", +# # "name:LoadBalancerName", +# # "cluster_owner:Tags.Tag[?TagKey=='cs.cluster.name'].TagValue | [0]" +# # ] +# +# ## Allow metrics without discovery data, if discovery is enabled. +# ## If set to true, then metric without discovery data would be emitted, otherwise dropped. +# ## This cane be of help, in case debugging dimension filters, or partial coverage of +# ## discovery scope vs monitoring scope +# # allow_dps_without_discovery = false + + +# # Query statistics from AMD Graphics cards using rocm-smi binary +# [[inputs.amd_rocm_smi]] +# ## Optional: path to rocm-smi binary, defaults to $PATH via exec.LookPath +# # bin_path = "/opt/rocm/bin/rocm-smi" +# +# ## Optional: timeout for GPU polling +# # timeout = "5s" + + +# # AMQP consumer plugin +# [[inputs.amqp_consumer]] +# ## Brokers to consume from. If multiple brokers are specified a random broker +# ## will be selected anytime a connection is established. This can be +# ## helpful for load balancing when not using a dedicated load balancer. +# brokers = ["amqp://localhost:5672/influxdb"] +# +# ## Authentication credentials for the PLAIN auth_method. +# # username = "" +# # password = "" +# +# ## Name of the exchange to declare. If unset, no exchange will be declared. +# exchange = "telegraf" +# +# ## Exchange type; common types are "direct", "fanout", "topic", "header", "x-consistent-hash". +# # exchange_type = "topic" +# +# ## If true, exchange will be passively declared. +# # exchange_passive = false +# +# ## Exchange durability can be either "transient" or "durable". +# # exchange_durability = "durable" +# +# ## Additional exchange arguments. +# # exchange_arguments = { } +# # exchange_arguments = {"hash_property" = "timestamp"} +# +# ## AMQP queue name. +# queue = "telegraf" +# +# ## AMQP queue durability can be "transient" or "durable". +# queue_durability = "durable" +# +# ## If true, queue will be passively declared. +# # queue_passive = false +# +# ## Additional arguments when consuming from Queue +# # queue_consume_arguments = { } +# # queue_consume_arguments = {"x-stream-offset" = "first"} +# +# ## Additional queue arguments. +# # queue_arguments = { } +# # queue_arguments = {"x-max-length" = 100} +# +# ## A binding between the exchange and queue using this binding key is +# ## created. If unset, no binding is created. +# binding_key = "#" +# +# ## Maximum number of messages server should give to the worker. +# # prefetch_count = 50 +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Timeout for establishing the connection to a broker +# # timeout = "30s" +# +# ## Auth method. PLAIN and EXTERNAL are supported +# ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as +# ## described here: https://www.rabbitmq.com/plugins.html +# # auth_method = "PLAIN" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Content encoding for message payloads, can be set to +# ## "gzip", "identity" or "auto" +# ## - Use "gzip" to decode gzip +# ## - Use "identity" to apply no encoding +# ## - Use "auto" determine the encoding using the ContentEncoding header +# # content_encoding = "identity" +# +# ## Maximum size of decoded message. +# ## Acceptable units are B, KiB, KB, MiB, MB... +# ## Without quotes and units, interpreted as size in bytes. +# # max_decompression_size = "500MB" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Get standard chrony metrics. +# [[inputs.chrony]] +# ## Server address of chronyd with address scheme +# ## If empty or not set, the plugin will mimic the behavior of chronyc and +# ## check "unixgram:///run/chrony/chronyd.sock", "udp://127.0.0.1:323" +# ## and "udp://[::1]:323". +# # server = "" +# +# ## Timeout for establishing the connection +# # timeout = "5s" +# +# ## Try to resolve received addresses to host-names via DNS lookups +# ## Disabled by default to avoid DNS queries especially for slow DNS servers. +# # dns_lookup = false +# +# ## Metrics to query named according to chronyc commands +# ## Available settings are: +# ## activity -- number of peers online or offline +# ## tracking -- information about system's clock performance +# ## serverstats -- chronyd server statistics +# ## sources -- extended information about peers +# ## sourcestats -- statistics on peers +# # metrics = ["tracking"] +# +# ## Socket group & permissions +# ## If the user requests collecting metrics via unix socket, then it is created +# ## with the following group and permissions. +# # socket_group = "chrony" +# # socket_perms = "0660" + + +# # Cisco model-driven telemetry (MDT) input plugin for IOS XR, IOS XE and NX-OS platforms +# [[inputs.cisco_telemetry_mdt]] +# ## Telemetry transport can be "tcp" or "grpc". TLS is only supported when +# ## using the grpc transport. +# transport = "grpc" +# +# ## Address and port to host telemetry listener +# service_address = ":57000" +# +# ## Grpc Maximum Message Size, default is 4MB, increase the size. This is +# ## stored as a uint32, and limited to 4294967295. +# max_msg_size = 4000000 +# +# ## Enable TLS; grpc transport only. +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Enable TLS client authentication and define allowed CA certificates; grpc +# ## transport only. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Define (for certain nested telemetry measurements with embedded tags) which fields are tags +# # embedded_tags = ["Cisco-IOS-XR-qos-ma-oper:qos/interface-table/interface/input/service-policy-names/service-policy-instance/statistics/class-stats/class-name"] +# +# ## Include the delete field in every telemetry message. +# # include_delete_field = false +# +# ## Specify custom name for incoming MDT source field. +# # source_field_name = "mdt_source" +# +# ## Define aliases to map telemetry encoding paths to simple measurement names +# [inputs.cisco_telemetry_mdt.aliases] +# ifstats = "ietf-interfaces:interfaces-state/interface/statistics" +# ## Define Property Xformation, please refer README and https://pubhub.devnetcloud.com/media/dme-docs-9-3-3/docs/appendix/ for Model details. +# [inputs.cisco_telemetry_mdt.dmes] +# # Global Property Xformation. +# # prop1 = "uint64 to int" +# # prop2 = "uint64 to string" +# # prop3 = "string to uint64" +# # prop4 = "string to int64" +# # prop5 = "string to float64" +# # auto-prop-xfrom = "auto-float-xfrom" #Xform any property which is string, and has float number to type float64 +# # Per Path property xformation, Name is telemetry configuration under sensor-group, path configuration "WORD Distinguished Name" +# # Per Path configuration is better as it avoid property collision issue of types. +# # dnpath = '{"Name": "show ip route summary","prop": [{"Key": "routes","Value": "string"}, {"Key": "best-paths","Value": "string"}]}' +# # dnpath2 = '{"Name": "show processes cpu","prop": [{"Key": "kernel_percent","Value": "float"}, {"Key": "idle_percent","Value": "float"}, {"Key": "process","Value": "string"}, {"Key": "user_percent","Value": "float"}, {"Key": "onesec","Value": "float"}]}' +# # dnpath3 = '{"Name": "show processes memory physical","prop": [{"Key": "processname","Value": "string"}]}' +# +# ## Additional GRPC connection settings. +# [inputs.cisco_telemetry_mdt.grpc_enforcement_policy] +# ## GRPC permit keepalives without calls, set to true if your clients are +# ## sending pings without calls in-flight. This can sometimes happen on IOS-XE +# ## devices where the GRPC connection is left open but subscriptions have been +# ## removed, and adding subsequent subscriptions does not keep a stable session. +# # permit_keepalive_without_calls = false +# +# ## GRPC minimum timeout between successive pings, decreasing this value may +# ## help if this plugin is closing connections with ENHANCE_YOUR_CALM (too_many_pings). +# # keepalive_minimum_time = "5m" + + +# # Read metrics from one or many ClickHouse servers +# [[inputs.clickhouse]] +# ## Username for authorization on ClickHouse server +# username = "default" +# +# ## Password for authorization on ClickHouse server +# # password = "" +# +# ## HTTP(s) timeout while getting metrics values +# ## The timeout includes connection time, any redirects, and reading the +# ## response body. +# # timeout = 5s +# +# ## List of servers for metrics scraping +# ## metrics scrape via HTTP(s) clickhouse interface +# ## https://clickhouse.tech/docs/en/interfaces/http/ +# servers = ["http://127.0.0.1:8123"] +# +# ## Server Variant +# ## When set to "managed", some queries are excluded from being run. This is +# ## useful for instances hosted in ClickHouse Cloud where certain tables are +# ## not available. +# # variant = "self-hosted" +# +# ## If "auto_discovery"" is "true" plugin tries to connect to all servers +# ## available in the cluster with using same "user:password" described in +# ## "user" and "password" parameters and get this server hostname list from +# ## "system.clusters" table. See +# ## - https://clickhouse.tech/docs/en/operations/system_tables/#system-clusters +# ## - https://clickhouse.tech/docs/en/operations/server_settings/settings/#server_settings_remote_servers +# ## - https://clickhouse.tech/docs/en/operations/table_engines/distributed/ +# ## - https://clickhouse.tech/docs/en/operations/table_engines/replication/#creating-replicated-tables +# # auto_discovery = true +# +# ## Filter cluster names in "system.clusters" when "auto_discovery" is "true" +# ## when this filter present then "WHERE cluster IN (...)" filter will apply +# ## please use only full cluster names here, regexp and glob filters is not +# ## allowed for "/etc/clickhouse-server/config.d/remote.xml" +# ## +# ## +# ## +# ## +# ## clickhouse-ru-1.local9000 +# ## clickhouse-ru-2.local9000 +# ## +# ## +# ## clickhouse-eu-1.local9000 +# ## clickhouse-eu-2.local9000 +# ## +# ## +# ## +# ## +# ## +# ## +# ## example: cluster_include = ["my-own-cluster"] +# # cluster_include = [] +# +# ## Filter cluster names in "system.clusters" when "auto_discovery" is +# ## "true" when this filter present then "WHERE cluster NOT IN (...)" +# ## filter will apply +# ## example: cluster_exclude = ["my-internal-not-discovered-cluster"] +# # cluster_exclude = [] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics from Google PubSub +# [[inputs.cloud_pubsub]] +# ## Required. Name of Google Cloud Platform (GCP) Project that owns +# ## the given PubSub subscription. +# project = "my-project" +# +# ## Required. Name of PubSub subscription to ingest metrics from. +# subscription = "my-subscription" +# +# ## Required. Data format to consume. +# ## Each data format has its own unique set of configuration options. +# ## Read more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Optional. Filepath for GCP credentials JSON file to authorize calls to +# ## PubSub APIs. If not set explicitly, Telegraf will attempt to use +# ## Application Default Credentials, which is preferred. +# # credentials_file = "path/to/my/creds.json" +# +# ## Optional. Number of seconds to wait before attempting to restart the +# ## PubSub subscription receiver after an unexpected error. +# ## If the streaming pull for a PubSub Subscription fails (receiver), +# ## the agent attempts to restart receiving messages after this many seconds. +# # retry_delay_seconds = 5 +# +# ## Optional. Maximum byte length of a message to consume. +# ## Larger messages are dropped with an error. If less than 0 or unspecified, +# ## treated as no limit. +# # max_message_len = 1000000 +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## The following are optional Subscription ReceiveSettings in PubSub. +# ## Read more about these values: +# ## https://godoc.org/cloud.google.com/go/pubsub/v2#ReceiveSettings +# +# ## Optional. Maximum number of seconds for which a PubSub subscription +# ## should auto-extend the PubSub ACK deadline for each message. If less than +# ## 0, auto-extension is disabled. +# # max_extension = 0 +# +# ## Optional. Maximum number of unprocessed messages in PubSub +# ## (unacknowledged but not yet expired in PubSub). +# ## A value of 0 is treated as the default PubSub value. +# ## Negative values will be treated as unlimited. +# # max_outstanding_messages = 0 +# +# ## Optional. Maximum size in bytes of unprocessed messages in PubSub +# ## (unacknowledged but not yet expired in PubSub). +# ## A value of 0 is treated as the default PubSub value. +# ## Negative values will be treated as unlimited. +# # max_outstanding_bytes = 0 +# +# ## Optional. Max number of goroutines a PubSub Subscription receiver can spawn +# ## to pull messages from PubSub concurrently. This limit applies to each +# ## subscription separately and is treated as the PubSub default if less than +# ## 1. Note this setting does not limit the number of messages that can be +# ## processed concurrently (use "max_outstanding_messages" instead). +# # max_receiver_go_routines = 0 +# +# ## Optional. If true, Telegraf will attempt to base64 decode the +# ## PubSub message data before parsing. Many GCP services that +# ## output JSON to Google PubSub base64-encode the JSON payload. +# # base64_data = false +# +# ## Content encoding for message payloads, can be set to "gzip" or +# ## "identity" to apply no encoding. +# # content_encoding = "identity" +# +# ## If content encoding is not "identity", sets the maximum allowed size, +# ## in bytes, for a message payload when it's decompressed. Can be increased +# ## for larger payloads or reduced to protect against decompression bombs. +# ## Acceptable units are B, KiB, KB, MiB, MB... +# # max_decompression_size = "500MB" + + +# # Google Cloud Pub/Sub Push HTTP listener +# [[inputs.cloud_pubsub_push]] +# ## Address and port to host HTTP listener on +# service_address = ":8080" +# +# ## Application secret to verify messages originate from Cloud Pub/Sub +# # token = "" +# +# ## Path to listen to. +# # path = "/" +# +# ## Maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## Maximum duration before timing out write of the response. This should be +# ## set to a value large enough that you can send at least 'metric_batch_size' +# ## number of messages within the duration. +# # write_timeout = "10s" +# +# ## Maximum allowed http request body size in bytes. +# ## 0 means to use the default of 524,288,00 bytes (500 mebibytes) +# # max_body_size = "500MB" +# +# ## Whether to add the pubsub metadata, such as message attributes and +# ## subscription as a tag. +# # add_meta = false +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # AWS Metric Streams listener +# [[inputs.cloudwatch_metric_streams]] +# ## Address and port to host HTTP listener on +# service_address = ":443" +# +# ## Paths to listen to. +# # paths = ["/telegraf"] +# +# ## maximum duration before timing out read of the request +# # read_timeout = "10s" +# +# ## maximum duration before timing out write of the response +# # write_timeout = "10s" +# +# ## Maximum allowed http request body size in bytes. +# ## 0 means to use the default of 524,288,000 bytes (500 mebibytes) +# # max_body_size = "500MB" +# +# ## Optional access key for Firehose security. +# # access_key = "test-key" +# +# ## An optional flag to keep Metric Streams metrics compatible with +# ## CloudWatch's API naming +# # api_compatability = false +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" + + +# # A ctrlX Data Layer server sent event input plugin +# [[inputs.ctrlx_datalayer]] +# ## Hostname or IP address of the ctrlX CORE Data Layer server +# ## example: server = "localhost" # Telegraf is running directly on the device +# ## server = "192.168.1.1" # Connect to ctrlX CORE remote via IP +# ## server = "host.example.com" # Connect to ctrlX CORE remote via hostname +# ## server = "10.0.2.2:8443" # Connect to ctrlX CORE Virtual from development environment +# server = "localhost" +# +# ## Authentication credentials +# username = "boschrexroth" +# password = "boschrexroth" +# +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Timeout for HTTP requests. (default: "10s") +# # timeout = "10s" +# +# +# ## Create a ctrlX Data Layer subscription. +# ## It is possible to define multiple subscriptions per host. Each subscription can have its own +# ## sampling properties and a list of nodes to subscribe to. +# ## All subscriptions share the same credentials. +# [[inputs.ctrlx_datalayer.subscription]] +# ## The name of the measurement. (default: "ctrlx") +# measurement = "memory" +# +# ## Configure the ctrlX Data Layer nodes which should be subscribed. +# ## address - node address in ctrlX Data Layer (mandatory) +# ## name - field name to use in the output (optional, default: base name of address) +# ## tags - extra node tags to be added to the output metric (optional) +# ## Note: +# ## Use either the inline notation or the bracketed notation, not both. +# ## The tags property is only supported in bracketed notation due to toml parser restrictions +# ## Examples: +# ## Inline notation +# nodes=[ +# {name="available", address="framework/metrics/system/memavailable-mb"}, +# {name="used", address="framework/metrics/system/memused-mb"}, +# ] +# ## Bracketed notation +# # [[inputs.ctrlx_datalayer.subscription.nodes]] +# # name ="available" +# # address="framework/metrics/system/memavailable-mb" +# # ## Define extra tags related to node to be added to the output metric (optional) +# # [inputs.ctrlx_datalayer.subscription.nodes.tags] +# # node_tag1="node_tag1" +# # node_tag2="node_tag2" +# # [[inputs.ctrlx_datalayer.subscription.nodes]] +# # name ="used" +# # address="framework/metrics/system/memused-mb" +# +# ## The switch "output_json_string" enables output of the measurement as json. +# ## That way it can be used in in a subsequent processor plugin, e.g. "Starlark Processor Plugin". +# # output_json_string = false +# +# ## Define extra tags related to subscription to be added to the output metric (optional) +# # [inputs.ctrlx_datalayer.subscription.tags] +# # subscription_tag1 = "subscription_tag1" +# # subscription_tag2 = "subscription_tag2" +# +# ## The interval in which messages shall be sent by the ctrlX Data Layer to this plugin. (default: 1s) +# ## Higher values reduce load on network by queuing samples on server side and sending as a single TCP packet. +# # publish_interval = "1s" +# +# ## The interval a "keepalive" message is sent if no change of data occurs. (default: 60s) +# ## Only used internally to detect broken network connections. +# # keep_alive_interval = "60s" +# +# ## The interval an "error" message is sent if an error was received from a node. (default: 10s) +# ## Higher values reduce load on output target and network in case of errors by limiting frequency of error messages. +# # error_interval = "10s" +# +# ## The interval that defines the fastest rate at which the node values should be sampled and values captured. (default: 1s) +# ## The sampling frequency should be adjusted to the dynamics of the signal to be sampled. +# ## Higher sampling frequencies increases load on ctrlX Data Layer. +# ## The sampling frequency can be higher, than the publish interval. Captured samples are put in a queue and sent in publish interval. +# ## Note: The minimum sampling interval can be overruled by a global setting in the ctrlX Data Layer configuration ('datalayer/subscriptions/settings'). +# # sampling_interval = "1s" +# +# ## The requested size of the node value queue. (default: 10) +# ## Relevant if more values are captured than can be sent. +# # queue_size = 10 +# +# ## The behaviour of the queue if it is full. (default: "DiscardOldest") +# ## Possible values: +# ## - "DiscardOldest" +# ## The oldest value gets deleted from the queue when it is full. +# ## - "DiscardNewest" +# ## The newest value gets deleted from the queue when it is full. +# # queue_behaviour = "DiscardOldest" +# +# ## The filter when a new value will be sampled. (default: 0.0) +# ## Calculation rule: If (abs(lastCapturedValue - newValue) > dead_band_value) capture(newValue). +# # dead_band_value = 0.0 +# +# ## The conditions on which a sample should be captured and thus will be sent as a message. (default: "StatusValue") +# ## Possible values: +# ## - "Status" +# ## Capture the value only, when the state of the node changes from or to error state. Value changes are ignored. +# ## - "StatusValue" +# ## Capture when the value changes or the node changes from or to error state. +# ## See also 'dead_band_value' for what is considered as a value change. +# ## - "StatusValueTimestamp": +# ## Capture even if the value is the same, but the timestamp of the value is newer. +# ## Note: This might lead to high load on the network because every sample will be sent as a message +# ## even if the value of the node did not change. +# # value_change = "StatusValue" +# + + +# # Ingests files in a directory and then moves them to a target directory. +# [[inputs.directory_monitor]] +# ## The directory to monitor and read files from (including sub-directories if "recursive" is true). +# directory = "" +# # +# ## The directory to move finished files to (maintaining directory hierarchy from source). +# finished_directory = "" +# # +# ## Setting recursive to true will make the plugin recursively walk the directory and process all sub-directories. +# # recursive = false +# # +# ## The directory to move files to upon file error. +# ## If not provided, erroring files will stay in the monitored directory. +# # error_directory = "" +# # +# ## The amount of time a file is allowed to sit in the directory before it is picked up. +# ## This time can generally be low but if you choose to have a very large file written to the directory and it's potentially slow, +# ## set this higher so that the plugin will wait until the file is fully copied to the directory. +# # directory_duration_threshold = "50ms" +# # +# ## A list of the only file names to monitor, if necessary. Supports regex. If left blank, all files are ingested. +# # files_to_monitor = ["^.*\\.csv"] +# # +# ## A list of files to ignore, if necessary. Supports regex. +# # files_to_ignore = [".DS_Store"] +# # +# ## Maximum lines of the file to process that have not yet be written by the +# ## output. For best throughput set to the size of the output's metric_buffer_limit. +# ## Warning: setting this number higher than the output's metric_buffer_limit can cause dropped metrics. +# # max_buffered_metrics = 10000 +# # +# ## The maximum amount of file paths to queue up for processing at once, before waiting until files are processed to find more files. +# ## Lowering this value will result in *slightly* less memory use, with a potential sacrifice in speed efficiency, if absolutely necessary. +# # file_queue_size = 100000 +# # +# ## Name a tag containing the name of the file the data was parsed from. Leave empty +# ## to disable. Cautious when file name variation is high, this can increase the cardinality +# ## significantly. Read more about cardinality here: +# ## https://docs.influxdata.com/influxdb/cloud/reference/glossary/#series-cardinality +# # file_tag = "" +# # +# ## Specify if the file can be read completely at once or if it needs to be read line by line (default). +# ## Possible values: "line-by-line", "at-once" +# # parse_method = "line-by-line" +# # +# ## The dataformat to be read from the files. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Read metrics about docker containers +# [[inputs.docker]] +# ## Docker Endpoint +# ## To use TCP, set endpoint = "tcp://[ip]:[port]" +# ## To use environment variables (ie, docker-machine), set endpoint = "ENV" +# endpoint = "unix:///var/run/docker.sock" +# +# ## Set to true to collect Swarm metrics(desired_replicas, running_replicas) +# ## Note: configure this in one of the manager nodes in a Swarm cluster. +# ## configuring in multiple Swarm managers results in duplication of metrics. +# gather_services = false +# +# ## Set the source tag for the metrics to the container ID hostname, eg first 12 chars +# source_tag = false +# +# ## Containers to include and exclude. Collect all if empty. Globs accepted. +# container_name_include = [] +# container_name_exclude = [] +# +# ## Container states to include and exclude. Globs accepted. +# ## When empty only containers in the "running" state will be captured. +# ## example: container_state_include = ["created", "restarting", "running", "removing", "paused", "exited", "dead"] +# ## example: container_state_exclude = ["created", "restarting", "running", "removing", "paused", "exited", "dead"] +# # container_state_include = [] +# # container_state_exclude = [] +# +# ## Objects to include for disk usage query +# ## Allowed values are "container", "image", "volume" +# ## When empty disk usage is excluded +# storage_objects = [] +# +# ## Timeout for docker list, info, and stats commands +# timeout = "5s" +# +# ## Podman compatibility settings (auto-enabled when Podman detected) +# ## Cache TTL for accurate CPU percentage calculation (default: 60s) +# ## Set higher than your collection interval for accurate measurements +# ## Set to 0 to keep cache entries forever (not recommended for dynamic environments) +# # podman_cache_ttl = "60s" +# +# ## Specifies for which classes a per-device metric should be issued +# ## Possible values are 'cpu' (cpu0, cpu1, ...), 'blkio' (8:0, 8:1, ...) and 'network' (eth0, eth1, ...) +# # perdevice_include = ["cpu"] +# +# ## Specifies for which classes a total metric should be issued. Total is an aggregated of the 'perdevice_include' values. +# ## Possible values are 'cpu', 'blkio' and 'network' +# ## Total 'cpu' is reported directly by Docker daemon, and 'network' and 'blkio' totals are aggregated by this plugin. +# # total_include = ["cpu", "blkio", "network"] +# +# ## docker labels to include and exclude as tags. Globs accepted. +# ## Note that an empty array for both will include all labels as tags +# docker_label_include = [] +# docker_label_exclude = [] +# +# ## Which environment variables should we use as a tag +# tag_env = ["JAVA_HOME", "HEAP_SIZE"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read logging output from the Docker engine +# [[inputs.docker_log]] +# ## Docker Endpoint +# ## To use TCP, set endpoint = "tcp://[ip]:[port]" +# ## To use environment variables (ie, docker-machine), set endpoint = "ENV" +# # endpoint = "unix:///var/run/docker.sock" +# +# ## When true, container logs are read from the beginning; otherwise reading +# ## begins at the end of the log. If state-persistence is enabled for Telegraf, +# ## the reading continues at the last previously processed timestamp. +# # from_beginning = false +# +# ## Timeout for Docker API calls. +# # timeout = "5s" +# +# ## Containers to include and exclude. Globs accepted. +# ## Note that an empty array for both will include all containers +# # container_name_include = [] +# # container_name_exclude = [] +# +# ## Container states to include and exclude. Globs accepted. +# ## When empty only containers in the "running" state will be captured. +# # container_state_include = [] +# # container_state_exclude = [] +# +# ## docker labels to include and exclude as tags. Globs accepted. +# ## Note that an empty array for both will include all labels as tags +# # docker_label_include = [] +# # docker_label_exclude = [] +# +# ## Set the source tag for the metrics to the container ID hostname, eg first 12 chars +# source_tag = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Reads metrics from DPDK applications using v2 telemetry interface. +# # This plugin ONLY supports Linux +# [[inputs.dpdk]] +# ## Path to DPDK telemetry socket. This shall point to v2 version of DPDK +# ## telemetry interface. +# # socket_path = "/var/run/dpdk/rte/dpdk_telemetry.v2" +# +# ## Duration that defines how long the connected socket client will wait for +# ## a response before terminating connection. +# ## This includes both writing to and reading from socket. Since it's local +# ## socket access to a fast packet processing application, the timeout should +# ## be sufficient for most users. +# ## Setting the value to 0 disables the timeout (not recommended) +# # socket_access_timeout = "200ms" +# +# ## Enables telemetry data collection for selected device types. +# ## Adding "ethdev" enables collection of telemetry from DPDK NICs (stats, xstats, link_status, info). +# ## Adding "rawdev" enables collection of telemetry from DPDK Raw Devices (xstats). +# # device_types = ["ethdev"] +# +# ## List of custom, application-specific telemetry commands to query +# ## The list of available commands depend on the application deployed. +# ## Applications can register their own commands via telemetry library API +# ## https://doc.dpdk.org/guides/prog_guide/telemetry_lib.html#registering-commands +# ## For L3 Forwarding with Power Management Sample Application this could be: +# ## additional_commands = ["/l3fwd-power/stats"] +# # additional_commands = [] +# +# ## List of plugin options. +# ## Supported options: +# ## - "in_memory" option enables reading for multiple sockets when a dpdk application is running with --in-memory option. +# ## When option is enabled plugin will try to find additional socket paths related to provided socket_path. +# ## Details: https://doc.dpdk.org/guides/howto/telemetry.html#connecting-to-different-dpdk-processes +# # plugin_options = ["in_memory"] +# +# ## Specifies plugin behavior regarding unreachable socket (which might not have been initialized yet). +# ## Available choices: +# ## - error: Telegraf will return an error during the startup and gather phases if socket is unreachable +# ## - ignore: Telegraf will ignore error regarding unreachable socket on both startup and gather +# # unreachable_socket_behavior = "error" +# +# ## List of metadata fields which will be added to every metric produced by the plugin. +# ## Supported options: +# ## - "pid" - exposes PID of DPDK process. Example: pid=2179660i +# ## - "version" - exposes version of DPDK. Example: version="DPDK 21.11.2" +# # metadata_fields = ["pid", "version"] +# +# ## Allows turning off collecting data for individual "ethdev" commands. +# ## Remove "/ethdev/link_status" from list to gather link status metrics. +# [inputs.dpdk.ethdev] +# exclude_commands = ["/ethdev/link_status"] +# +# ## When running multiple instances of the plugin it's recommended to add a +# ## unique tag to each instance to identify metrics exposed by an instance +# ## of DPDK application. This is useful when multiple DPDK apps run on a +# ## single host. +# ## [inputs.dpdk.tags] +# ## dpdk_instance = "my-fwd-app" + + +# # Read stats from one or more Elasticsearch servers or clusters +# [[inputs.elasticsearch]] +# ## specify a list of one or more Elasticsearch servers +# ## you can add username and password to your url to use basic authentication: +# ## servers = ["http://user:pass@localhost:9200"] +# servers = ["http://localhost:9200"] +# +# ## HTTP headers to send with each request +# # headers = { "X-Custom-Header" = "Custom" } +# +# ## When local is true (the default), the node will read only its own stats. +# ## Set local to false when you want to read the node stats from all nodes +# ## of the cluster. +# local = true +# +# ## Set cluster_health to true when you want to obtain cluster health stats +# cluster_health = false +# +# ## Adjust cluster_health_level when you want to obtain detailed health stats +# ## The options are +# ## - indices (default) +# ## - cluster +# # cluster_health_level = "indices" +# +# ## Set cluster_stats to true when you want to obtain cluster stats. +# cluster_stats = false +# +# ## Only gather cluster_stats from the master node. +# ## To work this require local = true +# cluster_stats_only_from_master = true +# +# ## Gather stats from the enrich API +# # enrich_stats = false +# +# ## Indices to collect; can be one or more indices names or _all +# ## Use of wildcards is allowed. Use a wildcard at the end to retrieve index +# ## names that end with a changing value, like a date. +# indices_include = ["_all"] +# +# ## One of "shards", "cluster", "indices" +# ## Currently only "shards" is implemented +# indices_level = "shards" +# +# ## node_stats is a list of sub-stats that you want to have gathered. +# ## Valid options are "indices", "os", "process", "jvm", "thread_pool", +# ## "fs", "transport", "http", "breaker". Per default, all stats are gathered. +# # node_stats = ["jvm", "http"] +# +# ## HTTP Basic Authentication username and password. +# # username = "" +# # password = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## If 'use_system_proxy' is set to true, Telegraf will check env vars such as +# ## HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (or their lowercase counterparts). +# ## If 'use_system_proxy' is set to false (default) and 'http_proxy_url' is +# ## provided, Telegraf will use the specified URL as HTTP proxy. +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## Sets the number of most recent indices to return for indices that are +# ## configured with a date-stamped suffix. Each 'indices_include' entry +# ## ending with a wildcard (*) or glob matching pattern will group together +# ## all indices that match it, and sort them by the date or number after +# ## the wildcard. Metrics then are gathered for only the +# ## 'num_most_recent_indices' amount of most recent indices. +# # num_most_recent_indices = 0 + + +# # Derive metrics from aggregating Elasticsearch query results +# [[inputs.elasticsearch_query]] +# ## The full HTTP endpoint URL for your Elasticsearch instance +# ## Multiple urls can be specified as part of the same cluster, +# ## this means that only ONE of the urls will be written to each interval. +# urls = [ "http://node1.es.example.com:9200" ] # required. +# +# ## Elasticsearch client timeout, defaults to "5s". +# # timeout = "5s" +# +# ## Set to true to ask Elasticsearch a list of all cluster nodes, +# ## thus it is not necessary to list all nodes in the urls config option +# # enable_sniffer = false +# +# ## Set the interval to check if the Elasticsearch nodes are available +# ## This option is only used if enable_sniffer is also set (0s to disable it) +# # health_check_interval = "10s" +# +# ## HTTP basic authentication details (eg. when using x-pack) +# # username = "telegraf" +# # password = "mypassword" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## If 'use_system_proxy' is set to true, Telegraf will check env vars such as +# ## HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (or their lowercase counterparts). +# ## If 'use_system_proxy' is set to false (default) and 'http_proxy_url' is +# ## provided, Telegraf will use the specified URL as HTTP proxy. +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# [[inputs.elasticsearch_query.aggregation]] +# ## measurement name for the results of the aggregation query +# measurement_name = "measurement" +# +# ## Elasticsearch indexes to query (accept wildcards). +# index = "index-*" +# +# ## The date/time field in the Elasticsearch index (mandatory). +# date_field = "@timestamp" +# +# ## If the field used for the date/time field in Elasticsearch is also using +# ## a custom date/time format it may be required to provide the format to +# ## correctly parse the field. +# ## +# ## If using one of the built in elasticsearch formats this is not required. +# # date_field_custom_format = "" +# +# ## Time window to query (eg. "1m" to query documents from last minute). +# ## Normally should be set to same as collection interval +# query_period = "1m" +# +# ## Lucene query to filter results +# # filter_query = "*" +# +# ## Fields to aggregate values (must be numeric fields) +# # metric_fields = ["metric"] +# +# ## Aggregation function to use on the metric fields +# ## Must be set if 'metric_fields' is set +# ## Valid values are: avg, sum, min, max, sum +# # metric_function = "avg" +# +# ## Fields to be used as tags +# ## Must be text, non-analyzed fields. Metric aggregations are performed +# ## per tag +# # tags = ["field.keyword", "field2.keyword"] +# +# ## Set to true to not ignore documents when the tag(s) above are missing +# # include_missing_tag = false +# +# ## String value of the tag when the tag does not exist +# ## Used when include_missing_tag is true +# # missing_tag_value = "null" + + +# # Azure Event Hubs service input plugin +# [[inputs.eventhub_consumer]] +# ## The default behavior is to create a new Event Hub client from environment variables. +# ## This requires one of the following sets of environment variables to be set: +# ## +# ## 1) Expected Environment Variables: +# ## - "EVENTHUB_CONNECTION_STRING" +# ## +# ## 2) Expected Environment Variables: +# ## - "EVENTHUB_NAMESPACE" +# ## - "EVENTHUB_NAME" +# ## - "EVENTHUB_KEY_NAME" +# ## - "EVENTHUB_KEY_VALUE" +# +# ## 3) Expected Environment Variables: +# ## - "EVENTHUB_NAMESPACE" +# ## - "EVENTHUB_NAME" +# ## - "AZURE_TENANT_ID" +# ## - "AZURE_CLIENT_ID" +# ## - "AZURE_CLIENT_SECRET" +# +# ## Uncommenting the option below will create an Event Hub client based solely on the connection string. +# ## This can either be the associated environment variable or hard coded directly. +# ## If this option is uncommented, environment variables will be ignored. +# ## Connection string should contain EventHubName (EntityPath) +# # connection_string = "" +# +# ## Set persistence directory to a valid folder to use a file persister instead of an in-memory persister +# # persistence_dir = "" +# +# ## Change the default consumer group +# # consumer_group = "" +# +# ## By default the event hub receives all messages present on the broker, alternative modes can be set below. +# ## The timestamp should be in https://github.com/toml-lang/toml#offset-date-time format (RFC 3339). +# ## The 3 options below only apply if no valid persister is read from memory or file (e.g. first run). +# # from_timestamp = +# # latest = true +# +# ## Set a custom prefetch count for the receiver(s) +# # prefetch_count = 1000 +# +# ## Add an epoch to the receiver(s) +# # epoch = 0 +# +# ## Change to set a custom user agent, "telegraf" is used by default +# # user_agent = "telegraf" +# +# ## To consume from a specific partition, set the partition_ids option. +# ## An empty array will result in receiving from all partitions. +# # partition_ids = ["0","1"] +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Set either option below to true to use a system property as timestamp. +# ## You have the choice between EnqueuedTime and IoTHubEnqueuedTime. +# ## It is recommended to use this setting when the data itself has no timestamp. +# # enqueued_time_as_ts = true +# # iot_hub_enqueued_time_as_ts = true +# +# ## Tags or fields to create from keys present in the application property bag. +# ## These could for example be set by message enrichments in Azure IoT Hub. +# # application_property_tags = [] +# # application_property_fields = [] +# +# ## Tag or field name to use for metadata +# ## By default all metadata is disabled +# # sequence_number_field = "SequenceNumber" +# # enqueued_time_field = "EnqueuedTime" +# # offset_field = "Offset" +# # partition_id_tag = "PartitionID" +# # partition_key_tag = "PartitionKey" +# # iot_hub_device_connection_id_tag = "IoTHubDeviceConnectionID" +# # iot_hub_auth_generation_id_tag = "IoTHubAuthGenerationID" +# # iot_hub_connection_auth_method_tag = "IoTHubConnectionAuthMethod" +# # iot_hub_connection_module_id_tag = "IoTHubConnectionModuleID" +# # iot_hub_enqueued_time_field = "IoTHubEnqueuedTime" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Run executable as long-running input plugin +# [[inputs.execd]] +# ## One program to run as daemon. +# ## NOTE: process and each argument should each be their own string +# command = ["telegraf-smartctl", "-d", "/dev/sda"] +# +# ## Environment variables +# ## Array of "key=value" pairs to pass as environment variables +# ## e.g. "KEY=value", "USERNAME=John Doe", +# ## "LD_LIBRARY_PATH=/opt/custom/lib64:/usr/local/libs" +# # environment = [] +# +# ## Define how the process is signaled on each collection interval. +# ## Valid values are: +# ## "none" : Do not signal anything. (Recommended for service inputs) +# ## The process must output metrics by itself. +# ## "STDIN" : Send a newline on STDIN. (Recommended for gather inputs) +# ## "SIGHUP" : Send a HUP signal. Not available on Windows. (not recommended) +# ## "SIGUSR1" : Send a USR1 signal. Not available on Windows. +# ## "SIGUSR2" : Send a USR2 signal. Not available on Windows. +# # signal = "none" +# +# ## Delay before the process is restarted after an unexpected termination +# # restart_delay = "10s" +# +# ## Buffer size used to read from the command output stream +# ## Optional parameter. Default is 64 Kib, minimum is 16 bytes +# # buffer_size = "64Kib" +# +# ## Disable automatic restart of the program and stop if the program exits +# ## with an error (non-zero error code) +# # stop_on_error = false +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" + + +# # AWS Data Firehose listener +# [[inputs.firehose]] +# ## Address and port to host HTTP listener on +# service_address = ":8080" +# +# ## Paths to listen to. +# # paths = ["/telegraf"] +# +# ## maximum duration before timing out read of the request +# # read_timeout = "5s" +# ## maximum duration before timing out write of the response +# # write_timeout = "5s" +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Minimal TLS version accepted by the server +# # tls_min_version = "TLS12" +# +# ## Optional access key to accept for authentication. +# ## AWS Data Firehose uses "x-amz-firehose-access-key" header to set the access key. +# ## If no access_key is provided (default), authentication is completely disabled and +# ## this plugin will accept all request ignoring the provided access-key in the request! +# # access_key = "foobar" +# +# ## Optional setting to add parameters as tags +# ## If the http header "x-amz-firehose-common-attributes" is not present on the +# ## request, no corresponding tag will be added. The header value should be a +# ## json and should follow the schema as describe in the official documentation: +# ## https://docs.aws.amazon.com/firehose/latest/dev/httpdeliveryrequestresponse.html#requestformat +# # parameter_tags = ["env"] +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" + + +# # gNMI telemetry input plugin +# [[inputs.gnmi]] +# ## Address and port of the gNMI GRPC server +# addresses = ["10.49.234.114:57777"] +# +# ## define credentials +# username = "cisco" +# password = "cisco" +# +# ## gNMI encoding requested (one of: "proto", "json", "json_ietf", "bytes") +# # encoding = "proto" +# +# ## redial in case of failures after +# # redial = "10s" +# +# ## gRPC Keepalive settings +# ## See https://pkg.go.dev/google.golang.org/grpc/keepalive +# ## The client will ping the server to see if the transport is still alive if it has +# ## not see any activity for the given time. +# ## If not set, none of the keep-alive setting (including those below) will be applied. +# ## If set and set below 10 seconds, the gRPC library will apply a minimum value of 10s will be used instead. +# # keepalive_time = "" +# +# ## Timeout for seeing any activity after the keep-alive probe was +# ## sent. If no activity is seen the connection is closed. +# # keepalive_timeout = "" +# +# ## gRPC Maximum Message Size +# # max_msg_size = "4MB" +# +# ## Subtree depth for depth extension (disables if < 1) +# ## see https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-depth.md +# # depth = 0 +# +# ## Enable to get the canonical path as field-name +# # canonical_field_names = false +# +# ## Remove leading slashes and dots in field-name +# # trim_field_names = false +# +# ## Only receive updates for the state, also suppresses receiving the initial state +# # updates_only = false +# +# ## Emit a metric for "delete" messages +# # emit_delete_metrics = false +# +# ## Enforces the namespace of the first element as origin for aliases and +# ## response paths, required for backward compatibility. +# ## NOTE: Set to 'false' if possible but be aware that this might change the path tag! +# # enforce_first_namespace_as_origin = true +# +# ## Guess the path-tag if an update does not contain a prefix-path +# ## Supported values are +# ## none -- do not add a 'path' tag +# ## common path -- use the common path elements of all fields in an update +# ## subscription -- use the subscription path +# # path_guessing_strategy = "none" +# +# ## Prefix tags from path keys with the path element +# # prefix_tag_key_with_path = false +# +# ## Optional client-side TLS to authenticate the device +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## gNMI subscription prefix (optional, can usually be left empty) +# ## See: https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md#222-paths +# # origin = "" +# # prefix = "" +# # target = "" +# +# ## Vendor specific options +# ## This defines what vendor specific options to load. +# ## * Juniper Header Extension (juniper_header): some sensors are directly managed by +# ## Linecard, which adds the Juniper GNMI Header Extension. Enabling this +# ## allows the decoding of the Extension header if present. Currently this knob +# ## adds component, component_id & sub_component_id as additional tags +# # vendor_specific = [] +# +# ## YANG model paths for decoding IETF JSON payloads +# ## Model files are loaded recursively from the given directories. Disabled if +# ## no models are specified. +# # yang_model_paths = [] +# +# ## Define additional aliases to map encoding paths to measurement names +# # [inputs.gnmi.aliases] +# # ifcounters = "openconfig:/interfaces/interface/state/counters" +# +# [[inputs.gnmi.subscription]] +# ## Name of the measurement that will be emitted +# name = "ifcounters" +# +# ## Origin and path of the subscription +# ## See: https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md#222-paths +# ## +# ## origin usually refers to a (YANG) data model implemented by the device +# ## and path to a specific substructure inside it that should be subscribed +# ## to (similar to an XPath). YANG models can be found e.g. here: +# ## https://github.com/YangModels/yang/tree/master/vendor/cisco/xr +# origin = "openconfig-interfaces" +# path = "/interfaces/interface/state/counters" +# +# ## Subscription mode ("target_defined", "sample", "on_change") and interval +# subscription_mode = "sample" +# sample_interval = "10s" +# +# ## Suppress redundant transmissions when measured values are unchanged +# # suppress_redundant = false +# +# ## If suppression is enabled, send updates at least every X seconds anyway +# # heartbeat_interval = "60s" +# +# ## Tag subscriptions are applied as tags to other subscriptions. +# # [[inputs.gnmi.tag_subscription]] +# # ## When applying this value as a tag to other metrics, use this tag name +# # name = "descr" +# # +# # ## All other subscription fields are as normal +# # origin = "openconfig-interfaces" +# # path = "/interfaces/interface/state" +# # subscription_mode = "on_change" +# # +# # ## Match strategy to use for the tag. +# # ## Tags are only applied for metrics of the same address. The following +# # ## settings are valid: +# # ## unconditional -- always match +# # ## name -- match by the "name" key +# # ## This resembles the previous 'tag-only' behavior. +# # ## elements -- match by the keys in the path filtered by the path +# # ## parts specified `elements` below +# # ## By default, 'elements' is used if the 'elements' option is provided, +# # ## otherwise match by 'name'. +# # # match = "" +# # +# # ## For the 'elements' match strategy, at least one path-element name must +# # ## be supplied containing at least one key to match on. Multiple path +# # ## elements can be specified in any order. All given keys must be equal +# # ## for a match. +# # # elements = ["description", "interface"] + + +# # Read formatted metrics from one or more HTTP endpoints +# [[inputs.http]] +# ## One or more URLs from which to read formatted metrics. +# urls = [ +# "http://localhost/metrics", +# "http+unix:///run/user/420/podman/podman.sock:/d/v4.0.0/libpod/pods/json" +# ] +# +# ## HTTP method +# # method = "GET" +# +# ## Optional HTTP headers +# # headers = {"X-Special-Header" = "Special-Value"} +# +# ## HTTP entity-body to send with POST/PUT requests. +# # body = "" +# +# ## HTTP Content-Encoding for write request body, can be set to "gzip" to +# ## compress body or "identity" to apply no encoding. +# # content_encoding = "identity" +# +# ## Optional Bearer token settings to use for the API calls. +# ## Use either the token itself or the token file if you need a token. +# # token = "eyJhbGc...Qssw5c" +# # token_file = "/path/to/file" +# +# ## Optional HTTP Basic Auth Credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## OAuth2 Client Credentials. The options 'client_id', 'client_secret', and 'token_url' are required to use OAuth2. +# # client_id = "clientid" +# # client_secret = "secret" +# # token_url = "https://indentityprovider/oauth2/v1/token" +# # audience = "" +# # scopes = ["urn:opc:idm:__myscopes__"] +# +# ## Optional Cookie authentication +# # cookie_auth_url = "https://localhost/authMe" +# # cookie_auth_method = "POST" +# # cookie_auth_username = "username" +# # cookie_auth_password = "pa$$word" +# # cookie_auth_headers = { Content-Type = "application/json", X-MY-HEADER = "hello" } +# # cookie_auth_body = '{"username": "user", "password": "pa$$word", "authenticate": "me"}' +# ## cookie_auth_renewal not set or set to "0" will auth once and never renew the cookie +# # cookie_auth_renewal = "0s" +# +# ## List of success status codes +# # success_status_codes = [200] +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" +# + + +# # Generic HTTP write listener +# [[inputs.http_listener_v2]] +# ## Address to host HTTP listener on +# ## can be prefixed by protocol tcp, or unix if not provided defaults to tcp +# ## if unix network type provided it should be followed by absolute path for unix socket +# service_address = "tcp://:8080" +# ## service_address = "tcp://:8443" +# ## service_address = "unix:///tmp/telegraf.sock" +# +# ## Permission for unix sockets (only available for unix sockets) +# ## This setting may not be respected by some platforms. To safely restrict +# ## permissions it is recommended to place the socket into a previously +# ## created directory with the desired permissions. +# ## ex: socket_mode = "777" +# # socket_mode = "" +# +# ## Paths to listen to. +# # paths = ["/telegraf"] +# +# ## Save path as http_listener_v2_path tag if set to true +# # path_tag = false +# +# ## HTTP methods to accept. +# # methods = ["POST", "PUT"] +# +# ## Optional HTTP headers +# ## These headers are applied to the server that is listening for HTTP +# ## requests and included in responses. +# # http_headers = {"HTTP_HEADER" = "TAG_NAME"} +# +# ## HTTP Return Success Code +# ## This is the HTTP code that will be returned on success +# # http_success_code = 204 +# +# ## maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## maximum duration before timing out write of the response +# # write_timeout = "10s" +# +# ## Maximum allowed http request body size in bytes. +# ## 0 means to use the default of 524,288,000 bytes (500 mebibytes) +# # max_body_size = "500MB" +# +# ## Part of the request to consume. Available options are "body" and +# ## "query". +# # data_source = "body" +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Minimal TLS version accepted by the server +# # tls_min_version = "TLS12" +# +# ## Optional username and password to accept for HTTP basic authentication. +# ## You probably want to make sure you have TLS configured above for this. +# # basic_username = "foobar" +# # basic_password = "barfoo" +# +# ## Optional setting to map http headers into tags +# ## If the http header is not present on the request, no corresponding tag will be added +# ## If multiple instances of the http header are present, only the first value will be used +# # http_header_tags = {"HTTP_HEADER" = "TAG_NAME"} +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Accept metrics over InfluxDB 1.x HTTP API +# [[inputs.influxdb_listener]] +# ## Address and port to host HTTP listener on +# service_address = ":8186" +# +# ## maximum duration before timing out read of the request +# read_timeout = "10s" +# ## maximum duration before timing out write of the response +# write_timeout = "10s" +# +# ## Maximum allowed HTTP request body size in bytes. +# ## 0 means to use the default of 32MiB. +# max_body_size = 0 +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# tls_cert = "/etc/telegraf/cert.pem" +# tls_key = "/etc/telegraf/key.pem" +# +# ## Optional tag name used to store the database name. +# ## If the write has a database in the query string then it will be kept in this tag name. +# ## This tag can be used in downstream outputs. +# ## The default value of nothing means it will be off and the database will not be recorded. +# ## If you have a tag that is the same as the one specified below, and supply a database, +# ## the tag will be overwritten with the database supplied. +# # database_tag = "" +# +# ## If set the retention policy specified in the write query will be added as +# ## the value of this tag name. +# # retention_policy_tag = "" +# +# ## Optional username and password to accept for HTTP basic authentication +# ## or authentication token. +# ## You probably want to make sure you have TLS configured above for this. +# ## Use these options for the authentication token in the form +# ## Authentication: Token : +# # basic_username = "foobar" +# # basic_password = "barfoo" +# +# ## Optional JWT token authentication for HTTP requests +# ## Please see the documentation at +# ## https://docs.influxdata.com/influxdb/v1.8/administration/authentication_and_authorization/#authenticate-using-jwt-tokens +# ## for further details. +# ## Please note: Token authentication and basic authentication cannot be used +# ## at the same time. +# # token_shared_secret = "" +# # token_username = "" +# +# ## Influx line protocol parser +# ## 'internal' is the default. 'upstream' is a newer parser that is faster +# ## and more memory efficient. +# # parser_type = "internal" + + +# # Accept metrics over InfluxDB 2.x HTTP API +# [[inputs.influxdb_v2_listener]] +# ## Address and port to host InfluxDB listener on +# ## (Double check the port. Could be 9999 if using OSS Beta) +# service_address = ":8086" +# +# ## Maximum undelivered metrics before rate limit kicks in. +# ## When the rate limit kicks in, HTTP status 429 will be returned. +# ## 0 disables rate limiting +# # max_undelivered_metrics = 0 +# +# ## Maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## Maximum duration before timing out write of the response +# # write_timeout = "10s" +# +# ## Maximum allowed HTTP request body size in bytes. +# ## 0 means to use the default of 32MiB. +# # max_body_size = "32MiB" +# +# ## Optional tag to determine the bucket. +# ## If the write has a bucket in the query string then it will be kept in this tag name. +# ## This tag can be used in downstream outputs. +# ## The default value of nothing means it will be off and the database will not be recorded. +# # bucket_tag = "" +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Add service certificate and key +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Optional token to accept for HTTP authentication. +# ## You probably want to make sure you have TLS configured above for this. +# # token = "some-long-shared-secret-token" +# +# ## Influx line protocol parser +# ## 'internal' is the default. 'upstream' is a newer parser that is faster +# ## and more memory efficient. +# # parser_type = "internal" +# +# ## Use new internal metrics. When true, it adds tag for alias if set. +# # use_internal_statistics = false + + +# # Intel Performance Monitoring Unit plugin exposes Intel PMU metrics available through Linux Perf subsystem +# # This plugin ONLY supports Linux on amd64 +# [[inputs.intel_pmu]] +# ## List of filesystem locations of JSON files that contain PMU event definitions. +# event_definitions = ["/var/cache/pmu/GenuineIntel-6-55-4-core.json", "/var/cache/pmu/GenuineIntel-6-55-4-uncore.json"] +# +# ## List of core events measurement entities. There can be more than one core_events sections. +# [[inputs.intel_pmu.core_events]] +# ## List of events to be counted. Event names shall match names from event_definitions files. +# ## Single entry can contain name of the event (case insensitive) augmented with config options and perf modifiers. +# ## If absent, all core events from provided event_definitions are counted skipping unresolvable ones. +# events = ["INST_RETIRED.ANY", "CPU_CLK_UNHALTED.THREAD_ANY:config1=0x4043200000000k"] +# +# ## Limits the counting of events to core numbers specified. +# ## If absent, events are counted on all cores. +# ## Single "0", multiple "0,1,2" and range "0-2" notation is supported for each array element. +# ## example: cores = ["0,2", "4", "12-16"] +# cores = ["0"] +# +# ## Indicator that plugin shall attempt to run core_events.events as a single perf group. +# ## If absent or set to false, each event is counted individually. Defaults to false. +# ## This limits the number of events that can be measured to a maximum of available hardware counters per core. +# ## Could vary depending on type of event, use of fixed counters. +# # perf_group = false +# +# ## Optionally set a custom tag value that will be added to every measurement within this events group. +# ## Can be applied to any group of events, unrelated to perf_group setting. +# # events_tag = "" +# +# ## List of uncore event measurement entities. There can be more than one uncore_events sections. +# [[inputs.intel_pmu.uncore_events]] +# ## List of events to be counted. Event names shall match names from event_definitions files. +# ## Single entry can contain name of the event (case insensitive) augmented with config options and perf modifiers. +# ## If absent, all uncore events from provided event_definitions are counted skipping unresolvable ones. +# events = ["UNC_CHA_CLOCKTICKS", "UNC_CHA_TOR_OCCUPANCY.IA_MISS"] +# +# ## Limits the counting of events to specified sockets. +# ## If absent, events are counted on all sockets. +# ## Single "0", multiple "0,1" and range "0-1" notation is supported for each array element. +# ## example: sockets = ["0-2"] +# sockets = ["0"] +# +# ## Indicator that plugin shall provide an aggregated value for multiple units of same type distributed in an uncore. +# ## If absent or set to false, events for each unit are exposed as separate metric. Defaults to false. +# # aggregate_uncore_units = false +# +# ## Optionally set a custom tag value that will be added to every measurement within this events group. +# # events_tag = "" + + +# # Intel PowerStat plugin enables monitoring of platform metrics (power, TDP) +# # and per-CPU metrics like temperature, power and utilization. Please see the +# # plugin readme for details on software and hardware compatibility. +# # This plugin ONLY supports Linux. +# [[inputs.intel_powerstat]] +# ## The user can choose which package metrics are monitored by the plugin with +# ## the package_metrics setting: +# ## - The default, will collect "current_power_consumption", +# ## "current_dram_power_consumption" and "thermal_design_power". +# ## - Leaving this setting empty means no package metrics will be collected. +# ## - Finally, a user can specify individual metrics to capture from the +# ## supported options list. +# ## Supported options: +# ## "current_power_consumption", "current_dram_power_consumption", +# ## "thermal_design_power", "max_turbo_frequency", "uncore_frequency", +# ## "cpu_base_frequency" +# # package_metrics = ["current_power_consumption", "current_dram_power_consumption", "thermal_design_power"] +# +# ## The user can choose which per-CPU metrics are monitored by the plugin in +# ## cpu_metrics array. +# ## Empty or missing array means no per-CPU specific metrics will be collected +# ## by the plugin. +# ## Supported options: +# ## "cpu_frequency", "cpu_c0_state_residency", "cpu_c1_state_residency", +# ## "cpu_c3_state_residency", "cpu_c6_state_residency", "cpu_c7_state_residency", +# ## "cpu_temperature", "cpu_busy_frequency", "cpu_c0_substate_c01", +# ## "cpu_c0_substate_c02", "cpu_c0_substate_c0_wait" +# # cpu_metrics = [] +# +# ## CPUs metrics to include from those configured in cpu_metrics array +# ## Can't be combined with excluded_cpus. Empty means all CPUs are gathered. +# ## e.g. ["0-3", "4,5,6"] or ["1-3,4"] +# # included_cpus = [] +# +# ## CPUs metrics to exclude from those configured in cpu_metrics array +# ## Can't be combined with included_cpus. Empty means all CPUs are gathered. +# ## e.g. ["0-3", "4,5,6"] or ["1-3,4"] +# # excluded_cpus = [] +# +# ## Filesystem location of JSON file that contains PMU event definitions. +# ## Mandatory only for perf-related metrics (cpu_c0_substate_c01, cpu_c0_substate_c02, cpu_c0_substate_c0_wait). +# # event_definitions = "" +# +# ## The user can set the timeout duration for MSR reading. +# ## Enabling this timeout can be useful in situations where, on heavily loaded systems, +# ## the code waits too long for a kernel response to MSR read requests. +# ## 0 disables the timeout (default). +# # msr_read_timeout = "0ms" + + +# # Read Intel RDT metrics +# # This plugin ONLY supports non-Windows +# [[inputs.intel_rdt]] +# ## Optionally set sampling interval to Nx100ms. +# ## This value is propagated to pqos tool. Interval format is defined by pqos itself. +# ## If not provided or provided 0, will be set to 10 = 10x100ms = 1s. +# # sampling_interval = "10" +# +# ## Optionally specify the path to pqos executable. +# ## If not provided, auto discovery will be performed. +# # pqos_path = "/usr/local/bin/pqos" +# +# ## Optionally specify if IPC and LLC_Misses metrics shouldn't be propagated. +# ## If not provided, default value is false. +# # shortened_metrics = false +# +# ## Specify the list of groups of CPU core(s) to be provided as pqos input. +# ## Mandatory if processes aren't set and forbidden if processes are specified. +# ## e.g. ["0-3", "4,5,6"] or ["1-3,4"] +# # cores = ["0-3"] +# +# ## Specify the list of processes for which Metrics will be collected. +# ## Mandatory if cores aren't set and forbidden if cores are specified. +# ## e.g. ["qemu", "pmd"] +# # processes = ["process"] +# +# ## Specify if the pqos process should be called with sudo. +# ## Mandatory if the telegraf process does not run as root. +# # use_sudo = false + + +# # Subscribe and receive OpenConfig Telemetry data using JTI +# [[inputs.jti_openconfig_telemetry]] +# ## List of device addresses to collect telemetry from +# servers = ["localhost:1883"] +# +# ## Authentication details. Username and password are must if device expects +# ## authentication. Client ID must be unique when connecting from multiple instances +# ## of telegraf to the same device +# username = "user" +# password = "pass" +# client_id = "telegraf" +# +# ## Frequency to get data +# sample_frequency = "1000ms" +# +# ## Sensors to subscribe for +# ## A identifier for each sensor can be provided in path by separating with space +# ## Else sensor path will be used as identifier +# ## When identifier is used, we can provide a list of space separated sensors. +# ## A single subscription will be created with all these sensors and data will +# ## be saved to measurement with this identifier name +# sensors = [ +# "/interfaces/", +# "collection /components/ /lldp", +# ] +# +# ## We allow specifying sensor group level reporting rate. To do this, specify the +# ## reporting rate in Duration at the beginning of sensor paths / collection +# ## name. For entries without reporting rate, we use configured sample frequency +# sensors = [ +# "1000ms customReporting /interfaces /lldp", +# "2000ms collection /components", +# "/interfaces", +# ] +# +# ## Timestamp Source +# ## Set to 'collection' for time of collection, and 'data' for using the time +# ## provided by the _timestamp field. +# # timestamp_source = "collection" +# +# ## Optional TLS Config +# # enable_tls = false +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Delay between retry attempts of failed RPC calls or streams. Defaults to 1000ms. +# ## Failed streams/calls will not be retried if 0 is provided +# retry_delay = "1000ms" +# +# ## Period for sending keep-alive packets on idle connections +# ## This is helpful to identify broken connections to the server +# # keep_alive_period = "10s" +# +# ## To treat all string values as tags, set this to true +# str_as_tags = false + + +# # Read metrics from Kafka topics +# [[inputs.kafka_consumer]] +# ## Kafka brokers. +# brokers = ["localhost:9092"] +# +# ## Set the minimal supported Kafka version. Should be a string contains +# ## 4 digits in case if it is 0 version and 3 digits for versions starting +# ## from 1.0.0 separated by dot. This setting enables the use of new +# ## Kafka features and APIs. Must be 0.10.2.0(used as default) or greater. +# ## Please, check the list of supported versions at +# ## https://pkg.go.dev/github.com/Shopify/sarama#SupportedVersions +# ## ex: kafka_version = "2.6.0" +# ## ex: kafka_version = "0.10.2.0" +# # kafka_version = "0.10.2.0" +# +# ## Topics to consume. +# topics = ["telegraf"] +# +# ## Topic regular expressions to consume. Matches will be added to topics. +# ## Example: topic_regexps = [ "*test", "metric[0-9A-z]*" ] +# # topic_regexps = [ ] +# +# ## When set this tag will be added to all metrics with the topic as the value. +# # topic_tag = "" +# +# ## The list of Kafka message headers that should be pass as metric tags +# ## works only for Kafka version 0.11+, on lower versions the message headers +# ## are not available +# # msg_headers_as_tags = [] +# +# ## The name of kafka message header which value should override the metric name. +# ## In case when the same header specified in current option and in msg_headers_as_tags +# ## option, it will be excluded from the msg_headers_as_tags list. +# # msg_header_as_metric_name = "" +# +# ## Set metric(s) timestamp using the given source. +# ## Available options are: +# ## metric -- do not modify the metric timestamp +# ## inner -- use the inner message timestamp (Kafka v0.10+) +# ## outer -- use the outer (compressed) block timestamp (Kafka v0.10+) +# # timestamp_source = "metric" +# +# ## Optional Client id +# # client_id = "Telegraf" +# +# ## Optional TLS Config +# # enable_tls = false +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Period between keep alive probes. +# ## Defaults to the OS configuration if not specified or zero. +# # keep_alive_period = "15s" +# +# ## SASL authentication credentials. These settings should typically be used +# ## with TLS encryption enabled +# # sasl_username = "" +# # sasl_password = "" +# +# ## Optional SASL, one of: +# ## OAUTHBEARER, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI, AWS-MSK-IAM +# # sasl_mechanism = "" +# +# ## used if sasl_mechanism is GSSAPI +# # sasl_gssapi_service_name = "" +# # ## One of: KRB5_USER_AUTH and KRB5_KEYTAB_AUTH +# # sasl_gssapi_auth_type = "KRB5_USER_AUTH" +# # sasl_gssapi_kerberos_config_path = "/" +# # sasl_gssapi_realm = "realm" +# # sasl_gssapi_key_tab_path = "" +# # sasl_gssapi_disable_pafxfast = false +# +# ## used if sasl_mechanism is OAUTHBEARER +# # sasl_access_token = "" +# +# ## used if sasl_mechanism is AWS-MSK-IAM +# # sasl_aws_msk_iam_region = "" +# ## for profile based auth +# ## sasl_aws_msk_iam_profile = "" +# ## for role based auth +# ## sasl_aws_msk_iam_role = "" +# ## sasl_aws_msk_iam_session = "" +# +# ## Arbitrary key value string pairs to pass as a TOML table. For example: +# ## {logicalCluster = "cluster-042", poolId = "pool-027"} +# # sasl_extensions = {} +# +# ## SASL protocol version. When connecting to Azure EventHub set to 0. +# # sasl_version = 1 +# +# # Disable Kafka metadata full fetch +# # metadata_full = false +# +# ## Name of the consumer group. +# # consumer_group = "telegraf_metrics_consumers" +# +# ## Compression codec represents the various compression codecs recognized by +# ## Kafka in messages. +# ## 0 : None +# ## 1 : Gzip +# ## 2 : Snappy +# ## 3 : LZ4 +# ## 4 : ZSTD +# # compression_codec = 0 +# ## Initial offset position; one of "oldest" or "newest". +# # offset = "oldest" +# +# ## Consumer group partition assignment strategy; one of "range", "roundrobin" or "sticky". +# # balance_strategy = "range" +# +# ## Maximum number of retries for metadata operations including +# ## connecting. Sets Sarama library's Metadata.Retry.Max config value. If 0 or +# ## unset, use the Sarama default of 3, +# # metadata_retry_max = 0 +# +# ## Type of retry backoff. Valid options: "constant", "exponential" +# # metadata_retry_type = "constant" +# +# ## Amount of time to wait before retrying. When metadata_retry_type is +# ## "constant", each retry is delayed this amount. When "exponential", the +# ## first retry is delayed this amount, and subsequent delays are doubled. If 0 +# ## or unset, use the Sarama default of 250 ms +# # metadata_retry_backoff = 0 +# +# ## Maximum amount of time to wait before retrying when metadata_retry_type is +# ## "exponential". Ignored for other retry types. If 0, there is no backoff +# ## limit. +# # metadata_retry_max_duration = 0 +# +# ## When set to true, this turns each bootstrap broker address into a set of +# ## IPs, then does a reverse lookup on each one to get its canonical hostname. +# ## This list of hostnames then replaces the original address list. +# ## resolve_canonical_bootstrap_servers_only = false +# +# ## Maximum length of a message to consume, in bytes (default 0/unlimited); +# ## larger messages are dropped +# max_message_len = 1000000 +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Maximum amount of time the consumer should take to process messages. If +# ## the debug log prints messages from sarama about 'abandoning subscription +# ## to [topic] because consuming was taking too long', increase this value to +# ## longer than the time taken by the output plugin(s). +# ## +# ## Note that the effective timeout could be between 'max_processing_time' and +# ## '2 * max_processing_time'. +# # max_processing_time = "100ms" +# +# ## The default number of message bytes to fetch from the broker in each +# ## request (default 1MB). This should be larger than the majority of +# ## your messages, or else the consumer will spend a lot of time +# ## negotiating sizes and not actually consuming. Similar to the JVM's +# ## `fetch.message.max.bytes`. +# # consumer_fetch_default = "1MB" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" + + +# # Read status information from one or more Kibana servers +# [[inputs.kibana]] +# ## Specify a list of one or more Kibana servers +# servers = ["http://localhost:5601"] +# +# ## Timeout for HTTP requests +# timeout = "5s" +# +# ## HTTP Basic Auth credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## If 'use_system_proxy' is set to true, Telegraf will check env vars such as +# ## HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (or their lowercase counterparts). +# ## If 'use_system_proxy' is set to false (default) and 'http_proxy_url' is +# ## provided, Telegraf will use the specified URL as HTTP proxy. +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" + + +# # Configuration for the AWS Kinesis input. +# [[inputs.kinesis_consumer]] +# ## Amazon REGION of kinesis endpoint. +# region = "ap-southeast-2" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# # access_key = "" +# # secret_key = "" +# # token = "" +# # role_arn = "" +# # web_identity_token_file = "" +# # role_session_name = "" +# # profile = "" +# # shared_credential_file = "" +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default. +# ## ex: endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Kinesis StreamName must exist prior to starting telegraf. +# streamname = "StreamName" +# +# ## Shard iterator type +# ## Available options: 'TRIM_HORIZON' (first in non-expired) and 'LATEST' +# # shard_iterator_type = "TRIM_HORIZON" +# +# ## Interval for checking for new records +# ## Please consider limits for getting records documented here: +# ## https://docs.aws.amazon.com/streams/latest/dev/service-sizes-and-limits.html +# # poll_interval = "250ms" +# +# ## Interval for scanning for new shards created when resharding +# ## If set to zero, shards are only scanned once on startup. +# # shard_update_interval = "30s" +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Content encoding of the record data +# ## If you are processing a cloudwatch logs kinesis stream then set this to +# ## "gzip" as AWS compresses cloudwatch log data before it is sent to kinesis. +# # content_encoding = "identity" +# +# ## Data format of the records to consume +# ## See https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" +# +# ## Optional: Configuration for DynamoDB backend to store positions in the stream +# # [inputs.kinesis_consumer.checkpoint_dynamodb] +# # ## Unique name for this consumer +# # app_name = "default" +# # ## Table to store the sequence numbers in +# # table_name = "default" +# # ## Interval for persisting data to limit write operations +# # # interval = "10s" + + +# # Listener capable of handling KNX bus messages provided through a KNX-IP Interface. +# [[inputs.knx_listener]] +# ## Type of KNX-IP interface. +# ## Can be either "tunnel_udp", "tunnel_tcp", "tunnel" (alias for tunnel_udp) or "router". +# # service_type = "tunnel" +# +# ## Address of the KNX-IP interface. +# service_address = "localhost:3671" +# +# ## Measurement definition(s) +# # [[inputs.knx_listener.measurement]] +# # ## Name of the measurement +# # name = "temperature" +# # ## Datapoint-Type (DPT) of the KNX messages +# # dpt = "9.001" +# # ## Use the string representation instead of the numerical value for the +# # ## datapoint-type and the addresses below +# # # as_string = false +# # ## List of Group-Addresses (GAs) assigned to the measurement +# # addresses = ["5/5/1"] +# +# # [[inputs.knx_listener.measurement]] +# # name = "illumination" +# # dpt = "9.004" +# # addresses = ["5/5/3"] + + +# # Read metrics off Arista LANZ, via socket +# [[inputs.lanz]] +# ## URL to Arista LANZ endpoint +# servers = [ +# "tcp://switch1.int.example.com:50001", +# "tcp://switch2.int.example.com:50001", +# ] + + +# # Query Loki endpoints using LogQL +# [[inputs.logql]] +# ## URL of the Loki endpoint +# # url = "http://localhost:3100" +# +# ## Basic authentication properties +# # username = "" +# # password = "" +# +# ## Bearer token based authentication +# # token = "" +# +# ## Organization IDs for the queries in multi-tenant setups +# # organizations = [] +# +# ## Timeout for executing queries with zero meaning no timeout +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Instant queries, multiple instances are allowed +# # [[inputs.logql.instant]] +# # ## Fallback name of the resulting metrics to use as metric name in case +# # ## the __name__ property of the query results is empty. +# # # name = "logql" +# # +# # ## Query to execute +# # query = 'count_over_time({job="varlogs"}[24h])' +# # +# # ## Sorting direction of logs, either "forward" or "backward" +# # # sorting = "backward" +# # +# # ## Limit for the number of results returned by the server with zero +# # ## meaning no limit +# # # limit = 0 +# +# ## Range queries, multiple instances are allowed +# # [[inputs.logql.range]] +# # ## Fallback name of the resulting metrics to use as metric name in case +# # ## the __name__ property of the query results is empty. +# # # name = "logql" +# # +# # ## Query to execute +# # query = '{job="varlogs"}' +# # +# # ## Range parameters relative to the gathering time with positive values +# # ## refer to BEFORE and negative to AFTER the gathering time +# # start = "5m" +# # # end = "0s" +# # # step = "0s" +# # # interval = "0s" +# # +# # ## Sorting direction of logs, either "forward" or "backward" +# # # sorting = "backward" +# # +# # ## Limit for the number of results returned by the server with zero +# # ## meaning no limit +# # # limit = 0 + + +# # Read metrics exposed by Logstash +# [[inputs.logstash]] +# ## The URL of the exposed Logstash API endpoint. +# url = "http://127.0.0.1:9600" +# +# ## Use Logstash 5 single pipeline API, set to true when monitoring +# ## Logstash 5. +# # single_pipeline = false +# +# ## Enable optional collection components. Can contain +# ## "pipelines", "process", and "jvm". +# # collect = ["pipelines", "process", "jvm"] +# +# ## Timeout for HTTP requests. +# # timeout = "5s" +# +# ## Optional HTTP Basic Auth credentials. +# # username = "username" +# # password = "pa$$word" +# +# ## Optional TLS Config. +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Use TLS but skip chain & host verification. +# # insecure_skip_verify = false +# +# ## If 'use_system_proxy' is set to true, Telegraf will check env vars such as +# ## HTTP_PROXY, HTTPS_PROXY, and NO_PROXY (or their lowercase counterparts). +# ## If 'use_system_proxy' is set to false (default) and 'http_proxy_url' is +# ## provided, Telegraf will use the specified URL as HTTP proxy. +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## Optional HTTP headers. +# # [inputs.logstash.headers] +# # "X-Special-Header" = "Special-Value" + + +# # Read metrics from a Mavlink flight controller. +# [[inputs.mavlink]] +# ## Flight controller URL supporting serial port, UDP and TCP connections. +# ## Options are documented at +# ## https://mavsdk.mavlink.io/v1.4/en/cpp/guide/connections.html. +# ## +# ## Examples: +# ## - Serial port: serial:///dev/ttyACM0:57600 +# ## - TCP client: tcp://192.168.1.12:5760 +# ## - UDP client: udp://192.168.1.12:14550 +# ## - TCP server: tcpserver://:5760 +# ## - UDP server: udpserver://:14550 +# # url = "tcp://127.0.0.1:5760" +# +# ## Filter to specific messages. Only the messages in this list will be parsed. +# ## If blank or unset, all messages will be accepted. Glob syntax is accepted. +# ## Each message in this list should be lowercase camel_case, with "message_" +# ## prefix removed, eg: "global_position_int", "attitude" +# # filter = [] +# +# ## Mavlink system ID for Telegraf. Only used if the mavlink plugin is sending +# ## messages, eg. when `stream_request_frequency` is 0 (see below.) +# # system_id = 254 +# +# ## Determines whether the plugin sends requests to subscribe to data. +# ## In mavlink, stream rates must be configured before data is received. +# ## This config item sets the rate in Hz, with 0 disabling the request. +# ## +# ## This frequency should be set to 0 if your software already controls the +# ## rates using REQUEST_DATA_STREAM or MAV_CMD_SET_MESSAGE_INTERVAL +# ## (See https://mavlink.io/en/mavgen_python/howto_requestmessages.html) +# # stream_request_frequency = 4 + + +# # Read metrics from one or many MongoDB servers +# [[inputs.mongodb]] +# ## An array of URLs of the form: +# ## "mongodb://" [user ":" pass "@"] host [ ":" port] +# ## For example: +# ## mongodb://user:auth_key@10.10.3.30:27017, +# ## mongodb://10.10.3.33:18832, +# ## +# ## If connecting to a cluster, users must include the "?connect=direct" in +# ## the URL to ensure that the connection goes directly to the specified node +# ## and not have all connections passed to the master node. +# servers = ["mongodb://127.0.0.1:27017/?connect=direct"] +# +# ## When true, collect cluster status. +# ## Note that the query that counts jumbo chunks triggers a COLLSCAN, which +# ## may have an impact on performance. +# # gather_cluster_status = true +# +# ## When true, collect per database stats +# # gather_perdb_stats = false +# +# ## When true, collect per collection stats +# # gather_col_stats = false +# +# ## When true, collect usage statistics for each collection +# ## (insert, update, queries, remove, getmore, commands etc...). +# # gather_top_stat = false +# +# ## List of db where collections stats are collected +# ## If empty, all db are concerned +# # col_stats_dbs = ["local"] +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Specifies plugin behavior regarding disconnected servers +# ## Available choices : +# ## - error: telegraf will return an error on startup if one the servers is unreachable +# ## - skip: telegraf will skip unreachable servers on both startup and gather +# # disconnected_servers_behavior = "error" + + +# # Read metrics from MQTT topic(s) +# [[inputs.mqtt_consumer]] +# ## Broker URLs for the MQTT server or cluster. To connect to multiple +# ## clusters or standalone servers, use a separate plugin instance. +# ## example: servers = ["tcp://localhost:1883"] +# ## servers = ["ssl://localhost:1883"] +# ## servers = ["ws://localhost:1883"] +# servers = ["tcp://192.168.31.247:1883"] +# +# ## Topics that will be subscribed to. +# topics = [ +# "telegraf/host01/cpu", +# "telegraf/+/mem", +# "sensors/#", +# ] +# +# ## The message topic will be stored in a tag specified by this value. If set +# ## to the empty string no topic tag will be created. +# # topic_tag = "topic" +# +# ## QoS policy for messages +# ## 0 = at most once +# ## 1 = at least once +# ## 2 = exactly once +# ## +# ## When using a QoS of 1 or 2, you should enable persistent_session to allow +# ## resuming unacknowledged messages. +# # qos = 0 +# +# ## Connection timeout for initial connection in seconds +# # connection_timeout = "30s" +# +# ## Maximum interval between reconnection attempts after a connection loss. +# ## The MQTT library uses exponential backoff starting at 1 second up to this +# ## ceiling. The library default is 10 minutes, which can cause long delays +# ## before message flow resumes after a network outage. +# # max_reconnect_interval = "30s" +# +# ## Interval and ping timeout for keep-alive messages +# ## The sum of those options defines when a connection loss is detected. +# ## Note: The keep-alive interval needs to be greater or equal one second and +# ## fractions of a second are not supported. +# # keepalive = "60s" +# # ping_timeout = "10s" +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Persistent session disables clearing of the client session on connection. +# ## In order for this option to work you must also set client_id to identify +# ## the client. To receive messages that arrived while the client is offline, +# ## also set the qos option to 1 or 2 and don't forget to also set the QoS when +# ## publishing. Finally, using a persistent session will use the initial +# ## connection topics and not subscribe to any new topics even after +# ## reconnecting or restarting without a change in client ID. +# # persistent_session = false +# +# ## If unset, a random client ID will be generated. +# # client_id = "" +# +# ## Username and password to connect MQTT server. +# # username = "telegraf" +# # password = "metricsmetricsmetricsmetrics" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Client trace messages +# ## When set to true, and debug mode enabled in the agent settings, the MQTT +# ## client's messages are included in telegraf logs. These messages are very +# ## noisey, but essential for debugging issues. +# # client_trace = false +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Enable extracting tag values from MQTT topics +# ## _ denotes an ignored entry in the topic path, +# ## # denotes a variable length path element (can only be used once per setting) +# # [[inputs.mqtt_consumer.topic_parsing]] +# # topic = "" +# # measurement = "" +# # tags = "" +# # fields = "" +# ## Value supported is int, float, unit +# # [inputs.mqtt_consumer.topic_parsing.types] +# # key = type + + +# # Read metrics from NATS subject(s) +# [[inputs.nats_consumer]] +# ## urls of NATS servers +# servers = ["nats://localhost:4222"] +# +# ## subject(s) to consume +# ## If you use jetstream you need to set the subjects +# ## in jetstream_subjects +# subjects = ["telegraf"] +# +# ## jetstream subjects +# ## jetstream is a streaming technology inside of nats. +# ## With jetstream the nats-server persists messages and +# ## a consumer can consume historical messages. This is +# ## useful when telegraf needs to restart it don't miss a +# ## message. You need to configure the nats-server. +# ## https://docs.nats.io/nats-concepts/jetstream. +# jetstream_subjects = ["js_telegraf"] +# +# ## explicitly specify the jetstream stream name +# ## useful for sourced streams where there is no subject defined and +# ## thus jetstream_subjects won't work +# jetstream_stream = "" +# +# ## name a queue group +# queue_group = "telegraf_consumers" +# +# ## Optional authentication with username and password credentials +# # username = "" +# # password = "" +# +# ## Optional authentication with NATS credentials file (NATS 2.0) +# # credentials = "/etc/telegraf/nats.creds" +# +# ## Optional authentication with nkey seed file (NATS 2.0) +# # nkey_seed = "/etc/telegraf/seed.txt" +# +# ## Use Transport Layer Security +# # secure = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Sets the limits for pending msgs and bytes for each subscription +# ## These shouldn't need to be adjusted except in very high throughput scenarios +# # pending_message_limit = 65536 +# # pending_bytes_limit = 67108864 +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Read energy data from the local Neoom Beaam gateway +# [[inputs.neoom_beaam]] +# ## Address of the gateway +# # address = "https://10.10.10.10" +# +# ## Bearer token for accessing the data +# # token = "" +# +# ## Enforce refreshing the site configuration in each gather cycle +# # refresh_configuration = false +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Netflow v5, Netflow v9 and IPFIX collector +# [[inputs.netflow]] +# ## Address to listen for netflow,ipfix or sflow packets. +# ## example: service_address = "udp://:2055" +# ## service_address = "udp4://:2055" +# ## service_address = "udp6://:2055" +# service_address = "udp://:2055" +# +# ## Set the size of the operating system's receive buffer. +# ## example: read_buffer_size = "64KiB" +# ## Uses the system's default if not set. +# # read_buffer_size = "" +# +# ## Protocol version to use for decoding. +# ## Available options are +# ## "ipfix" -- IPFIX / Netflow v10 protocol (also works for Netflow v9) +# ## "netflow v5" -- Netflow v5 protocol +# ## "netflow v9" -- Netflow v9 protocol (also works for IPFIX) +# ## "sflow v5" -- sFlow v5 protocol +# # protocol = "ipfix" +# +# ## Private Enterprise Numbers (PEN) mappings for decoding +# ## This option allows to specify vendor-specific mapping files to use during +# ## decoding. +# # private_enterprise_number_files = [] +# +# ## Log incoming packets for tracing issues +# # log_level = "trace" + + +# # Gather Netgear Switch Discovery Protocol status +# [[inputs.nsdp]] +# ## The target address to use for status gathering. Either Broadcast (default) +# ## or the address of a single well-known device. +# # address = "255.255.255.255:63322" +# +# ## The maximum number of device responses to wait for. 0 means no limit. +# ## NSDP works asynchronously. Without a limit (0) the plugin always waits +# ## the amount given in timeout for possible responses. By setting this +# ## option to the known number of devices, the plugin completes +# ## processing as soon as the last device has answered. +# # device_limit = 0 +# +# ## The maximum duration to wait for device responses. +# # timeout = "2s" + + +# # Read metrics from NSQD topic(s) +# [[inputs.nsq_consumer]] +# ## An array representing the NSQD TCP HTTP Endpoints +# nsqd = ["localhost:4150"] +# +# ## An array representing the NSQLookupd HTTP Endpoints +# nsqlookupd = ["localhost:4161"] +# topic = "telegraf" +# channel = "consumer" +# max_in_flight = 100 +# +# ## Max undelivered messages +# ## This plugin uses tracking metrics, which ensure messages are read to +# ## outputs before acknowledging them to the original broker to ensure data +# ## is not lost. This option sets the maximum messages to read from the +# ## broker that have not been written by an output. +# ## +# ## This value needs to be picked with awareness of the agent's +# ## metric_batch_size value as well. Setting max undelivered messages too high +# ## can result in a constant stream of data batches to the output. While +# ## setting it too low may never flush the broker's messages. +# # max_undelivered_messages = 1000 +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Pulls statistics from nvidia GPUs attached to the host +# [[inputs.nvidia_smi]] +# ## Optional: path to nvidia-smi binary, defaults "/usr/bin/nvidia-smi" +# ## We will first try to locate the nvidia-smi binary with the explicitly specified value (or default value), +# ## if it is not found, we will try to locate it on PATH(exec.LookPath), if it is still not found, an error will be returned +# # bin_path = "/usr/bin/nvidia-smi" +# +# ## Optional: timeout for GPU polling +# # timeout = "5s" + + +# # Retrieve data from OPCUA devices +# [[inputs.opcua_listener]] +# ## Metric name +# # name = "opcua_listener" +# # +# ## OPC UA Endpoint URL +# # endpoint = "opc.tcp://localhost:4840" +# # +# ## Maximum time allowed to establish a connect to the endpoint. +# # connect_timeout = "10s" +# # +# ## Behavior when we fail to connect to the endpoint on initialization. Valid options are: +# ## "error": throw an error and exits Telegraf +# ## "ignore": ignore this plugin if errors are encountered +# # "retry": retry connecting at each interval +# # connect_fail_behavior = "error" +# # +# ## Maximum time allowed for a request over the established connection. +# # request_timeout = "5s" +# # +# # Maximum time that a session shall remain open without activity. +# # session_timeout = "20m" +# # +# ## The interval at which the server should at least update its monitored items. +# ## Please note that the OPC UA server might reject the specified interval if it cannot meet the required update rate. +# ## Therefore, always refer to the hardware/software documentation of your server to ensure the specified interval is supported. +# # subscription_interval = "100ms" +# # +# ## Security policy, one of "None", "Basic128Rsa15", "Basic256", +# ## "Basic256Sha256", or "auto" +# # security_policy = "auto" +# # +# ## Security mode, one of "None", "Sign", "SignAndEncrypt", or "auto" +# # security_mode = "auto" +# # +# ## Path to cert.pem. Required when security mode or policy isn't "None". +# ## If cert path is not supplied, self-signed cert and key will be generated. +# # certificate = "/etc/telegraf/cert.pem" +# # +# ## Path to private key.pem. Required when security mode or policy isn't "None". +# ## If key path is not supplied, self-signed cert and key will be generated. +# # private_key = "/etc/telegraf/key.pem" +# +# ## Path to additional, explicitly trusted certificate for the remote endpoint +# # remote_certificate = "/etc/telegraf/opcua_server_cert.pem" +# +# ## Authentication Method, one of "Certificate", "UserName", or "Anonymous". To +# ## authenticate using a specific ID, select 'Certificate' or 'UserName' +# # auth_method = "Anonymous" +# # +# ## Username. Required for auth_method = "UserName" +# # username = "" +# # +# ## Password. Required for auth_method = "UserName" +# # password = "" +# # +# ## Option to select the metric timestamp to use. Valid options are: +# ## "gather" -- uses the time of receiving the data in telegraf +# ## "server" -- uses the timestamp provided by the server +# ## "source" -- uses the timestamp provided by the source +# # timestamp = "gather" +# # +# ## The default timetsamp format is RFC3339Nano +# # Other timestamp layouts can be configured using the Go language time +# # layout specification from https://golang.org/pkg/time/#Time.Format +# # e.g.: json_timestamp_format = "2006-01-02T15:04:05Z07:00" +# #timestamp_format = "" +# # +# # +# ## Client trace messages +# ## When set to true, and debug mode enabled in the agent settings, the OPCUA +# ## client's messages are included in telegraf logs. These messages are very +# ## noisey, but essential for debugging issues. +# # client_trace = false +# # +# ## Include additional Fields in each metric +# ## Available options are: +# ## DataType -- OPC-UA Data Type (string) +# # optional_fields = [] +# # +# ## Node ID configuration +# ## name - field name to use in the output +# ## id - OPC UA node ID string (e.g., "ns=0;i=2262" or "nsu=http://...;s=Name") +# ## namespace - OPC UA namespace of the node (integer value 0 thru 3) +# ## namespace_uri - OPC UA namespace URI (alternative to namespace for stable references) +# ## identifier_type - OPC UA ID type (s=string, i=numeric, g=guid, b=opaque) +# ## identifier - OPC UA ID (tag as shown in opcua browser) +# ## default_tags - extra tags to be added to the output metric (optional) +# ## monitoring_params - additional settings for the monitored node (optional) +# ## +# ## Use EITHER 'id' OR the combination of 'namespace/namespace_uri' + 'identifier_type' + 'identifier' +# ## +# ## Monitoring parameters +# ## sampling_interval - interval at which the server should check for data +# ## changes (default: 0s) +# ## queue_size - size of the notification queue (default: 10) +# ## discard_oldest - how notifications should be handled in case of full +# ## notification queues, possible values: +# ## true: oldest value added to queue gets replaced with new +# ## (default) +# ## false: last value added to queue gets replaced with new +# ## data_change_filter - defines the condition under which a notification should +# ## be reported +# ## +# ## Data change filter +# ## trigger - specify the conditions under which a data change notification +# ## should be reported, possible values: +# ## "Status": only report notifications if the status changes +# ## (default if parameter is omitted) +# ## "StatusValue": report notifications if either status or value +# ## changes +# ## "StatusValueTimestamp": report notifications if either status, +# ## value or timestamp changes +# ## deadband_type - type of the deadband filter to be applied, possible values: +# ## "Absolute": absolute change in a data value to report a notification +# ## "Percent": works only with nodes that have an EURange property set +# ## and is defined as: send notification if +# ## (last value - current value) > +# ## (deadband_value/100.0) * ((high–low) of EURange) +# ## deadband_value - value to deadband_type, must be a float value, no filter is set +# ## for negative values +# ## +# ## Use either the inline notation or the bracketed notation, not both. +# # +# ## Inline notation using id string (recommended for simplicity) +# # nodes = [ +# # {name="ProductUri", id="ns=0;i=2262"}, +# # {name="ServerState", id="ns=0;i=2259"} +# # ] +# # +# ## Inline notation using individual fields (default_tags and monitoring_params not supported yet) +# # nodes = [ +# # {name="node1", namespace="", identifier_type="", identifier=""}, +# # {name="node2", namespace="", identifier_type="", identifier=""} +# # ] +# # +# ## Bracketed notation using id string +# # [[inputs.opcua_listener.nodes]] +# # name = "ProductUri" +# # id = "ns=0;i=2262" +# # default_tags = { tag1 = "value1", tag2 = "value2" } +# +# ## Bracketed notation using individual fields +# # [[inputs.opcua_listener.nodes]] +# # name = "node1" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # default_tags = { tag1 = "value1", tag2 = "value2" } +# # +# # [[inputs.opcua_listener.nodes]] +# # name = "node2" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # +# # [inputs.opcua_listener.nodes.monitoring_params] +# # sampling_interval = "0s" +# # queue_size = 10 +# # discard_oldest = true +# # +# # [inputs.opcua_listener.nodes.monitoring_params.data_change_filter] +# # trigger = "Status" +# # deadband_type = "Absolute" +# # deadband_value = 0.0 +# # +# # [[inputs.opcua_listener.nodes]] +# # name = "node3" +# # namespace_uri = "http://opcfoundation.org/UA/" +# # identifier_type = "" +# # identifier = "" +# # +# ## Node Group +# ## Sets defaults so they aren't required in every node. +# ## Default values can be set for: +# ## * Metric name +# ## * OPC UA namespace +# ## * Identifier +# ## * Default tags +# ## * Sampling interval +# ## +# ## Multiple node groups are allowed +# #[[inputs.opcua_listener.group]] +# ## Group Metric name. Overrides the top level name. If unset, the +# ## top level name is used. +# # name = +# # +# ## Group default namespace. If a node in the group doesn't set its +# ## namespace, this is used. +# # namespace = +# # +# ## Group default namespace URI. Alternative to namespace for stable references. +# ## If a node in the group doesn't set its namespace_uri, this is used. +# # namespace_uri = +# # +# ## Group default identifier type. If a node in the group doesn't set its +# ## identifier_type, this is used. +# # identifier_type = +# # +# ## Default tags that are applied to every node in this group. Can be +# ## overwritten in a node by setting a different value for the tag name. +# ## example: default_tags = { tag1 = "value1" } +# # default_tags = {} +# # +# ## Group default sampling interval. If a node in the group doesn't set its +# ## sampling interval, this is used. +# # sampling_interval = "0s" +# # +# ## Node ID Configuration. Array of nodes with the same settings as above. +# ## Use either the inline notation or the bracketed notation, not both. +# # +# ## Inline notation (default_tags and monitoring_params not supported yet) +# # nodes = [ +# # {name="node1", namespace="", identifier_type="", identifier=""}, +# # {name="node2", namespace="", identifier_type="", identifier=""} +# #] +# # +# ## Bracketed notation +# # [[inputs.opcua_listener.group.nodes]] +# # name = "node1" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # default_tags = { tag1 = "override1", tag2 = "value2" } +# # +# # [[inputs.opcua_listener.group.nodes]] +# # name = "node2" +# # namespace = "" +# # identifier_type = "" +# # identifier = "" +# # +# # [inputs.opcua_listener.group.nodes.monitoring_params] +# # sampling_interval = "0s" +# # queue_size = 10 +# # discard_oldest = true +# # +# # [inputs.opcua_listener.group.nodes.monitoring_params.data_change_filter] +# # trigger = "Status" +# # deadband_type = "Absolute" +# # deadband_value = 0.0 +# # +# +# ## Multiple event groups are allowed. +# ## Event nodes support both 'id' string format and individual fields. +# # [[inputs.opcua_listener.events]] +# # ## Polling interval for data collection +# # # sampling_interval = "10s" +# # ## Size of the notification queue +# # # queue_size = 10 +# # ## Node parameter defaults for node definitions below (used when id is not specified) +# # # namespace = "" +# # # identifier_type = "" +# # ## Specifies OPCUA Event sources to filter on +# # # source_names = ["SourceName1", "SourceName2"] +# # ## Fields to capture from event notifications +# # fields = ["Severity", "Message", "Time"] +# # +# # ## Type or level of events to capture from the monitored nodes. +# # ## Use 'id' string OR individual fields (namespace/identifier_type/identifier) +# # [inputs.opcua_listener.events.event_type_node] +# # id = "ns=0;i=2041" +# # # Or use individual fields: +# # # namespace = "" +# # # identifier_type = "" +# # # identifier = "" +# # +# # ## Nodes to monitor for event notifications associated with the defined +# # ## event type. Use 'id' string OR individual fields. +# # [[inputs.opcua_listener.events.node_ids]] +# # id = "ns=2;s=EventSource1" +# # # Or use individual fields: +# # # namespace = "" +# # # identifier_type = "" +# # # identifier = "" +# +# ## Enable workarounds required by some devices to work correctly +# # [inputs.opcua_listener.workarounds] +# # ## Set additional valid status codes, StatusOK (0x0) is always considered valid +# # # additional_valid_status_codes = ["0xC0"] +# # ## Use unregistered reads instead of registered reads +# # # use_unregistered_reads = false + + +# # Collects performance metrics from OpenStack services +# [[inputs.openstack]] +# ## The recommended interval to poll is '30m' +# +# ## The identity endpoint to authenticate against and get the service catalog from. +# authentication_endpoint = "https://my.openstack.cloud:5000" +# +# ## The domain to authenticate against when using a V3 identity endpoint. +# # domain = "default" +# +# ## The project to authenticate as. +# # project = "admin" +# +# ## User authentication credentials. Must have admin rights. +# username = "admin" +# password = "password" +# +# ## Available services are: +# ## "agents", "aggregates", "cinder_services", "flavors", "hypervisors", +# ## "networks", "nova_services", "ports", "projects", "servers", +# ## "serverdiagnostics", "services", "stacks", "storage_pools", "subnets", +# ## "volumes" +# # enabled_services = ["services", "projects", "hypervisors", "flavors", "networks", "volumes"] +# +# ## Query all instances of all tenants for the volumes and server services +# ## NOTE: Usually this is only permitted for administrators! +# # query_all_tenants = true +# +# ## output secrets (such as adminPass(for server) and UserID(for volume)). +# # output_secrets = false +# +# ## Amount of time allowed to complete the HTTP(s) request. +# # timeout = "5s" +# +# ## HTTP Proxy support +# # http_proxy_url = "" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Options for tags received from Openstack +# # tag_prefix = "openstack_tag_" +# # tag_value = "true" +# +# ## Timestamp format for timestamp data received from Openstack. +# ## If false format is unix nanoseconds. +# # human_readable_timestamps = false +# +# ## Measure Openstack call duration +# # measure_openstack_requests = false + + +# # Receive OpenTelemetry traces, metrics, and logs over gRPC +# [[inputs.opentelemetry]] +# ## Override the default (0.0.0.0:4317) destination OpenTelemetry gRPC service +# ## address:port +# # service_address = "0.0.0.0:4317" +# +# ## Override the default (5s) new connection timeout +# # timeout = "5s" +# +# ## gRPC Maximum Message Size +# # max_msg_size = "4MB" +# +# ## Override the default span attributes to be used as line protocol tags. +# ## These are always included as tags: +# ## - trace ID +# ## - span ID +# ## Common attributes can be found here: +# ## - https://github.com/open-telemetry/opentelemetry-collector/tree/main/semconv +# # span_dimensions = ["service.name", "span.name"] +# +# ## Override the default log record attributes to be used as line protocol tags. +# ## These are always included as tags, if available: +# ## - trace ID +# ## - span ID +# ## Common attributes can be found here: +# ## - https://github.com/open-telemetry/opentelemetry-collector/tree/main/semconv +# ## When using InfluxDB for both logs and traces, be certain that log_record_dimensions +# ## matches the span_dimensions value. +# # log_record_dimensions = ["service.name"] +# +# ## Override the default profile attributes to be used as line protocol tags. +# ## These are always included as tags, if available: +# ## - profile_id +# ## - address +# ## - sample +# ## - sample_name +# ## - sample_unit +# ## - sample_type +# ## - sample_type_unit +# ## Common attributes can be found here: +# ## - https://github.com/open-telemetry/opentelemetry-collector/tree/main/semconv +# # profile_dimensions = [] +# +# ## Override the default (prometheus-v1) metrics schema. +# ## Supports: "prometheus-v1", "prometheus-v2" +# ## For more information about the alternatives, read the Prometheus input +# ## plugin notes. +# # metrics_schema = "prometheus-v1" +# +# ## Optional TLS Config. +# ## For advanced options: https://github.com/influxdata/telegraf/blob/v1.18.3/docs/TLS.md +# ## +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# ## Add service certificate and key. +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" + + +# # Read metrics from one or many pgbouncer servers +# [[inputs.pgbouncer]] +# ## specify address via a url matching: +# ## postgres://[pqgotest[:password]]@host:port[/dbname]\ +# ## ?sslmode=[disable|verify-ca|verify-full] +# ## or a simple string: +# ## host=localhost port=5432 user=pqgotest password=... sslmode=... dbname=app_production +# ## +# ## All connection parameters are optional. +# ## +# address = "host=localhost user=pgbouncer sslmode=disable" +# +# ## Specify which "show" commands to gather metrics for. +# ## Choose from: "stats", "pools", "lists", "databases" +# # show_commands = ["stats", "pools"] + + +# # Read metrics from one or many postgresql servers +# [[inputs.postgresql]] +# ## Specify address via a url matching: +# ## postgres://[pqgotest[:password]]@localhost[/dbname]?sslmode=[disable|verify-ca|verify-full]&statement_timeout=... +# ## or a simple string: +# ## host=localhost user=pqgotest password=... sslmode=... dbname=app_production +# ## Users can pass the path to the socket as the host value to use a socket +# ## connection (e.g. `/var/run/postgresql`). +# ## +# ## All connection parameters are optional. +# ## +# ## Without the dbname parameter, the driver will default to a database +# ## with the same name as the user. This dbname is just for instantiating a +# ## connection with the server and doesn't restrict the databases we are trying +# ## to grab metrics for. +# ## +# address = "host=localhost user=postgres sslmode=disable" +# +# ## A custom name for the database that will be used as the "server" tag in the +# ## measurement output. If not specified, a default one generated from +# ## the connection address is used. +# # outputaddress = "db01" +# +# ## connection configuration. +# ## maxlifetime - specify the maximum lifetime of a connection. +# ## default is forever (0s) +# ## +# ## Note that this does not interrupt queries, the lifetime will not be enforced +# ## whilst a query is running +# # max_lifetime = "0s" +# +# ## A list of databases to explicitly ignore. If not specified, metrics for all +# ## databases are gathered. Do NOT use with the 'databases' option. +# # ignored_databases = ["postgres", "template0", "template1"] +# +# ## A list of databases to pull metrics about. If not specified, metrics for all +# ## databases are gathered. Do NOT use with the 'ignored_databases' option. +# # databases = ["app_production", "testing"] +# +# ## Whether to use prepared statements when connecting to the database. +# ## This should be set to false when connecting through a PgBouncer instance +# ## with pool_mode set to transaction. +# prepared_statements = true + + +# # Read metrics from one or many postgresql servers +# [[inputs.postgresql_extensible]] +# # specify address via a url matching: +# # postgres://[pqgotest[:password]]@host:port[/dbname]?sslmode=...&statement_timeout=... +# # or a simple string: +# # host=localhost port=5432 user=pqgotest password=... sslmode=... dbname=app_production +# # +# # All connection parameters are optional. +# # Without the dbname parameter, the driver will default to a database +# # with the same name as the user. This dbname is just for instantiating a +# # connection with the server and doesn't restrict the databases we are trying +# # to grab metrics for. +# # +# address = "host=localhost user=postgres sslmode=disable" +# +# ## Whether to use prepared statements when connecting to the database. +# ## This should be set to false when connecting through a PgBouncer instance +# ## with pool_mode set to transaction. +# prepared_statements = true +# +# # Define the toml config where the sql queries are stored +# # The script option can be used to specify the .sql file path. +# # If script and sqlquery options specified at same time, sqlquery will be used +# # +# # the measurement field defines measurement name for metrics produced +# # by the query. Default is "postgresql". +# # +# # the tagvalue field is used to define custom tags (separated by comas). +# # the query is expected to return columns which match the names of the +# # defined tags. The values in these columns must be of a string-type, +# # a number-type or a blob-type. +# # +# # The timestamp field is used to override the data points timestamp value. By +# # default, all rows inserted with current time. By setting a timestamp column, +# # the row will be inserted with that column's value. +# # +# # The min_version field specifies minimal database version this query +# # will run on. +# # +# # The max_version field when set specifies maximal database version +# # this query will NOT run on. +# # +# # Database version in `minversion` and `maxversion` is represented as +# # a single integer without last component, for example: +# # 9.6.2 -> 906 +# # 15.2 -> 1500 +# # +# # Structure : +# # [[inputs.postgresql_extensible.query]] +# # measurement string +# # sqlquery string +# # min_version int +# # max_version int +# # withdbname boolean +# # tagvalue string (coma separated) +# # timestamp string +# [[inputs.postgresql_extensible.query]] +# measurement="pg_stat_database" +# sqlquery="SELECT * FROM pg_stat_database WHERE datname" +# min_version=901 +# tagvalue="" +# [[inputs.postgresql_extensible.query]] +# script="your_sql-filepath.sql" +# min_version=901 +# max_version=1300 +# tagvalue="" + + +# # Read metrics from one or many prometheus clients +# [[inputs.prometheus]] +# ## An array of urls to scrape metrics from. +# urls = ["http://localhost:9100/metrics"] +# +# ## Metric version controls the mapping from Prometheus metrics into Telegraf metrics. +# ## See "Metric Format Configuration" in plugins/inputs/prometheus/README.md for details. +# ## Valid options: 1, 2 +# # metric_version = 1 +# +# ## Url tag name (tag containing scrapped url. optional, default is "url") +# # url_tag = "url" +# +# ## Whether the timestamp of the scraped metrics will be ignored. +# ## If set to true, the gather time will be used. +# # ignore_timestamp = false +# +# ## Override content-type of the returned message +# ## Available options are for prometheus: +# ## text, protobuf-delimiter, protobuf-compact, protobuf-text, +# ## and for openmetrics: +# ## openmetrics-text, openmetrics-protobuf +# ## By default the content-type of the response is used. +# # content_type_override = "" +# +# ## An array of Kubernetes services to scrape metrics from. +# # kubernetes_services = ["http://my-service-dns.my-namespace:9100/metrics"] +# +# ## Kubernetes config file to create client from. +# # kube_config = "/path/to/kubernetes.config" +# +# ## Scrape Pods +# ## Enable scraping of k8s pods. Further settings as to which pods to scape +# ## are determiend by the 'method' option below. When enabled, the default is +# ## to use annotations to determine whether to scrape or not. +# # monitor_kubernetes_pods = false +# +# ## Scrape Pods Method +# ## annotations: default, looks for specific pod annotations documented below +# ## settings: only look for pods matching the settings provided, not +# ## annotations +# ## settings+annotations: looks at pods that match annotations using the user +# ## defined settings +# # monitor_kubernetes_pods_method = "annotations" +# +# ## Scrape Pods 'annotations' method options +# ## If set method is set to 'annotations' or 'settings+annotations', these +# ## annotation flags are looked for: +# ## - prometheus.io/scrape: Required to enable scraping for this pod. Can also +# ## use 'prometheus.io/scrape=false' annotation to opt-out entirely. +# ## - prometheus.io/scheme: If the metrics endpoint is secured then you will +# ## need to set this to 'https' & most likely set the tls config +# ## - prometheus.io/path: If the metrics path is not /metrics, define it with +# ## this annotation +# ## - prometheus.io/port: If port is not 9102 use this annotation +# +# ## Scrape Pods 'settings' method options +# ## When using 'settings' or 'settings+annotations', the default values for +# ## annotations can be modified using with the following options: +# # monitor_kubernetes_pods_scheme = "http" +# # monitor_kubernetes_pods_port = "9102" +# # monitor_kubernetes_pods_path = "/metrics" +# +# ## Get the list of pods to scrape with either the scope of +# ## - cluster: the kubernetes watch api (default, no need to specify) +# ## - node: the local cadvisor api; for scalability. Note that the config node_ip or the environment variable NODE_IP must be set to the host IP. +# # pod_scrape_scope = "cluster" +# +# ## Only for node scrape scope: node IP of the node that telegraf is running on. +# ## Either this config or the environment variable NODE_IP must be set. +# # node_ip = "10.180.1.1" +# +# ## Only for node scrape scope: interval in seconds for how often to get updated pod list for scraping. +# ## Default is 60 seconds. +# # pod_scrape_interval = 60 +# +# ## Content length limit +# ## When set, telegraf will drop responses with length larger than the configured value. +# ## Default is "0KB" which means unlimited. +# # content_length_limit = "0KB" +# +# ## Restricts Kubernetes monitoring to a single namespace +# ## ex: monitor_kubernetes_pods_namespace = "default" +# # monitor_kubernetes_pods_namespace = "" +# ## The name of the label for the pod that is being scraped. +# ## Default is 'namespace' but this can conflict with metrics that have the label 'namespace' +# # pod_namespace_label_name = "namespace" +# # label selector to target pods which have the label +# # kubernetes_label_selector = "env=dev,app=nginx" +# # field selector to target pods +# # eg. To scrape pods on a specific node +# # kubernetes_field_selector = "spec.nodeName=$HOSTNAME" +# +# ## Filter which pod annotations and labels will be added to metric tags +# # +# # pod_annotation_include = ["annotation-key-1"] +# # pod_annotation_exclude = ["exclude-me"] +# # pod_label_include = ["label-key-1"] +# # pod_label_exclude = ["exclude-me"] +# +# # cache refresh interval to set the interval for re-sync of pods list. +# # Default is 60 minutes. +# # cache_refresh_interval = 60 +# +# ## Use bearer token for authorization. ('bearer_token' takes priority) +# # bearer_token = "/path/to/bearer/token" +# ## OR +# # bearer_token_string = "abc_123" +# +# ## HTTP Basic Authentication username and password. ('bearer_token' and +# ## 'bearer_token_string' take priority) +# # username = "" +# # password = "" +# +# ## Optional custom HTTP headers +# # http_headers = {"X-Special-Header" = "Special-Value"} +# +# ## Specify timeout duration for slower prometheus clients (default is 5s) +# # timeout = "5s" +# +# ## This option is now used by the HTTP client to set the header response +# ## timeout, not the overall HTTP timeout. +# # response_timeout = "5s" +# +# ## HTTP Proxy support +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile +# +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Use the given name as the SNI server name on each URL +# # tls_server_name = "myhost.example.org" +# +# ## TLS renegotiation method, choose from "never", "once", "freely" +# # tls_renegotiation_method = "never" +# +# ## Enable/disable TLS +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = true +# +# ## This option allows you to report the status of prometheus requests. +# # enable_request_metrics = false +# +# ## Scrape Services available in Consul Catalog +# # [inputs.prometheus.consul] +# # enabled = true +# # agent = "http://localhost:8500" +# # query_interval = "5m" +# +# # [[inputs.prometheus.consul.query]] +# # name = "a service name" +# # tag = "a service tag" +# # url = 'http://{{if ne .ServiceAddress ""}}{{.ServiceAddress}}{{else}}{{.Address}}{{end}}:{{.ServicePort}}/{{with .ServiceMeta.metrics_path}}{{.}}{{else}}metrics{{end}}' +# # [inputs.prometheus.consul.query.tags] +# # host = "{{.Node}}" +# +# ## Scrape Hosts available with http service discovery +# # [inputs.prometheus.http_service_discovery] +# # enabled = false +# # url = "http://localhost:9000/service-discovery" +# # query_interval = "5m" +# +# ## Control pod scraping based on pod namespace annotations +# ## Pass and drop here act like tagpass and tagdrop, but instead +# ## of filtering metrics they filters pod candidates for scraping +# #[inputs.prometheus.namespace_annotation_pass] +# # annotation_key = ["value1", "value2"] +# #[inputs.prometheus.namespace_annotation_drop] +# # some_annotation_key = ["dont-scrape"] + + +# # Query prometheus endpoints using PromQL +# [[inputs.promql]] +# ## URL of the prometheus endpoint +# url = "http://localhost:9090" +# +# ## Basic authentication properties +# # username = "" +# # password = "" +# +# ## Bearer token based authentication +# # token = "" +# +# ## Timeout for executing queries with zero meaning no timeout +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Instant queries, multiple instances are allowed +# # [[inputs.promql.instant]] +# # ## Fallback name of the resulting metrics to use as metric name in case +# # ## the __name__ property of the query results is empty. +# # # name = "promql" +# # +# # ## Query to execute +# # query = 'prometheus_http_requests_total' +# # +# # ## Limit for the number of results returned by the server with zero +# # ## meaning no limit +# # # limit = 0 +# +# ## Range queries, multiple instances are allowed +# # [[inputs.promql.range]] +# # ## Fallback name of the resulting metrics to use as metric name in case +# # ## the __name__ property of the query results is empty. +# # # name = "promql" +# # +# # ## Query to execute +# # query = 'prometheus_http_requests_total{job="prometheus"}' +# # +# # ## Range parameters relative to the gathering time with positive values +# # ## refer to BEFORE and negative to AFTER the gathering time +# # start = "5m" +# # # end = "0s" +# # step = "1m" +# # +# # ## Limit for the number of results returned by the server with zero +# # ## meaning no limit +# # # limit = 0 + + +# # RAS plugin exposes counter metrics for Machine Check Errors provided by RASDaemon (sqlite3 output is required). +# # This plugin ONLY supports Linux on 386, amd64, arm, and arm64 +# [[inputs.ras]] +# ## Optional path to RASDaemon sqlite3 database. +# ## Default: /var/lib/rasdaemon/ras-mc_event.db +# # db_path = "" + + +# # Read metrics from one or many redis servers +# [[inputs.redis]] +# ## specify servers via a url matching: +# ## [protocol://][username:password]@address[:port] +# ## e.g. +# ## tcp://localhost:6379 +# ## tcp://username:password@192.168.99.100 +# ## unix:///var/run/redis.sock +# ## +# ## If no servers are specified, then localhost is used as the host. +# ## If no port is specified, 6379 is used +# servers = ["tcp://localhost:6379"] +# +# ## Optional. Specify redis commands to retrieve values +# # [[inputs.redis.commands]] +# # # The command to run where each argument is a separate element +# # command = ["get", "sample-key"] +# # # The field to store the result in +# # field = "sample-key-value" +# # # The type of the result +# # # Can be "string", "integer", or "float" +# # type = "string" +# +# ## Specify username and password for ACL auth (Redis 6.0+). You can add this +# ## to the server URI above or specify it here. The values here take +# ## precedence. +# # username = "" +# # password = "" +# +# ## Optional TLS Config +# ## Check tls/config.go ClientConfig for more options +# # tls_enable = true +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = true + + +# # Riemann protobuff listener +# [[inputs.riemann_listener]] +# ## URL to listen on +# ## Default is "tcp://:5555" +# # service_address = "tcp://:8094" +# # service_address = "tcp://127.0.0.1:http" +# # service_address = "tcp4://:8094" +# # service_address = "tcp6://:8094" +# # service_address = "tcp6://[2001:db8::1]:8094" +# +# ## Maximum number of concurrent connections. +# ## 0 (default) is unlimited. +# # max_connections = 1024 +# ## Read timeout. +# ## 0 (default) is unlimited. +# # read_timeout = "30s" +# ## Optional TLS configuration. +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Enables client authentication if set. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# ## Maximum socket buffer size (in bytes when no unit specified). +# # read_buffer_size = "64KiB" +# ## Period between keep alive probes. +# ## 0 disables keep alive probes. +# ## Defaults to the OS configuration. +# # keep_alive_period = "5m" + + +# # Plugin for retrieving data from Siemens PLCs via the S7 protocol (RFC1006) +# [[inputs.s7comm]] +# ## Parameters to contact the PLC (mandatory) +# ## The server is in the [:port] format where the port defaults to 102 +# ## if not explicitly specified. +# server = "127.0.0.1:102" +# rack = 0 +# slot = 0 +# +# ## Connection or drive type of S7 protocol +# ## Available options are "PD" (programming device), "OP" (operator panel) or "basic" (S7 basic communication). +# # connection_type = "PD" +# +# ## Max count of fields to be bundled in one batch-request. (PDU size) +# # pdu_size = 20 +# +# ## Timeout for requests +# # timeout = "10s" +# +# ## Idle timeout for requests +# # idle_timeout = "60s" +# +# ## Log detailed connection messages for tracing issues +# # log_level = "trace" +# +# ## Metric definition(s) +# [[inputs.s7comm.metric]] +# ## Name of the measurement +# # name = "s7comm" +# +# ## Field definitions +# ## name - field name +# ## address - indirect address ".
    [.extra]" +# ## area - e.g. be "DB1" for data-block one +# ## type - supported types are (uppercase) +# ## X -- bit, requires the bit-number as 'extra' +# ## parameter +# ## B -- byte (8 bit) +# ## C -- character (8 bit) +# ## W -- word (16 bit) +# ## DW -- double word (32 bit) +# ## I -- integer (16 bit) +# ## DI -- double integer (32 bit) +# ## LI -- long integer (64 bit) only S7-1200 S7-1500 suported +# ## R -- IEEE 754 real floating point number (32 bit) +# ## LR -- IEEE 754 long real floating point number (64 bit) only S7-1200 S7-1500 suported +# ## DT -- date-time, always converted to unix timestamp +# ## with nano-second precision +# ## S -- string, requires the maximum length of the +# ## string as 'extra' parameter +# ## address - start address to read if not specified otherwise +# ## in the type field +# ## extra - extra parameter e.g. for the bit and string type +# fields = [ +# { name="rpm", address="DB1.R4" }, +# { name="status_ok", address="DB1.X2.1" }, +# { name="last_error", address="DB2.S1.32" }, +# { name="last_error_time", address="DB2.DT2" }, +# { name="long_counter", address="DB3.LR12" } +# ] +# +# ## Tags assigned to the metric +# # [inputs.s7comm.metric.tags] +# # device = "compressor" +# # location = "main building" + + +# ## DEPRECATED: The "sflow" plugin is deprecated in version 1.31.0 and will be removed in 1.40.0, use 'inputs.netflow' instead. +# # SFlow V5 Protocol Listener +# [[inputs.sflow]] +# ## Address to listen for sFlow packets. +# ## example: service_address = "udp://:6343" +# ## service_address = "udp4://:6343" +# ## service_address = "udp6://:6343" +# service_address = "udp://:6343" +# +# ## Set the size of the operating system's receive buffer. +# ## example: read_buffer_size = "64KiB" +# # read_buffer_size = "" + + +# # SIP (Session Initiation Protocol) health check plugin +# [[inputs.sip]] +# ## SIP server address to monitor +# ## Format: sip://host[:port] or sips://host[:port] +# ## sip:// - Standard SIP (default port 5060) +# ## sips:// - Secure SIP with TLS (default port 5061) +# server = "sip://sip.example.com:5060" +# +# ## Transport protocol +# ## Valid values: udp, tcp, ws, wss +# # transport = "udp" +# +# ## SIP method to use for health checks +# ## Valid values: OPTIONS, INVITE, MESSAGE +# # method = "OPTIONS" +# +# ## Request timeout +# # timeout = "5s" +# +# ## From user as it appears in SIP header +# # from_user = "telegraf" +# +# ## From domain (domain part of From header) +# ## If not specified, uses the server hostname +# # from_domain = "" +# +# ## To user as it appears in SIP header +# ## If not specified, uses the same value as from_user +# # to_user = "" +# +# ## Local address to use for outgoing requests +# # local_address = "" +# +# ## SIP digest authentication credentials +# ## Leave empty to use no authentication +# # username = "" +# # password = "" +# +# ## Optional TLS Config (only used for sips:// URLs or transport=tls/wss) +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Receive SNMP traps +# [[inputs.snmp_trap]] +# ## Transport, local address, and port to listen on. Transport must +# ## be "udp://". Omit local address to listen on all interfaces. +# ## example: "udp://127.0.0.1:1234" +# ## +# ## Special permissions may be required to listen on a port less than +# ## 1024. See README.md for details +# ## +# # service_address = "udp://:162" +# ## +# ## Path to mib files +# ## Used by the gosmi translator. +# ## To add paths when translating with netsnmp, use the MIBDIRS environment variable +# # path = ["/usr/share/snmp/mibs"] +# ## +# ## Timeout running snmptranslate command +# ## Used by the netsnmp translator only +# # timeout = "5s" +# ## Snmp version; one of "1", "2c" or "3". +# # version = "2c" +# ## SNMPv3 authentication and encryption options. +# ## +# ## Security Name. +# # sec_name = "myuser" +# ## Authentication protocol; one of "MD5", "SHA", "SHA224", "SHA256", "SHA384", "SHA512" or "". +# # auth_protocol = "MD5" +# ## Authentication password. +# # auth_password = "pass" +# ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". +# # sec_level = "authNoPriv" +# ## Privacy protocol used for encrypted messages; one of "DES", "AES", "AES192", "AES192C", "AES256", "AES256C" or "". +# # priv_protocol = "" +# ## Privacy password used for encrypted messages. +# # priv_password = "" + + +# # Generic socket listener capable of handling multiple socket types. +# [[inputs.socket_listener]] +# ## URL to listen on +# # service_address = "tcp://:8094" +# # service_address = "tcp://127.0.0.1:http" +# # service_address = "tcp4://:8094" +# # service_address = "tcp6://:8094" +# # service_address = "tcp6://[2001:db8::1]:8094" +# # service_address = "udp://:8094" +# # service_address = "udp4://:8094" +# # service_address = "udp6://:8094" +# # service_address = "unix:///tmp/telegraf.sock" +# # service_address = "unixgram:///tmp/telegraf.sock" +# # service_address = "vsock://cid:port" +# +# ## Permission for unix sockets (only available on unix sockets) +# ## This setting may not be respected by some platforms. To safely restrict +# ## permissions it is recommended to place the socket into a previously +# ## created directory with the desired permissions. +# ## ex: socket_mode = "777" +# # socket_mode = "" +# +# ## Maximum number of concurrent connections (only available on stream sockets like TCP) +# ## Zero means unlimited. +# # max_connections = 0 +# +# ## Read timeout (only available on stream sockets like TCP) +# ## Zero means unlimited. +# # read_timeout = "0s" +# +# ## Optional TLS configuration (only available on stream sockets like TCP) +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Enables client authentication if set. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Maximum socket buffer size (in bytes when no unit specified) +# ## For stream sockets, once the buffer fills up, the sender will start +# ## backing up. For datagram sockets, once the buffer fills up, metrics will +# ## start dropping. Defaults to the OS default. +# # read_buffer_size = "64KiB" +# +# ## Period between keep alive probes (only applies to TCP sockets) +# ## Zero disables keep alive probes. Defaults to the OS configuration. +# # keep_alive_period = "5m" +# +# ## Content encoding for message payloads +# ## Can be set to "gzip" for compressed payloads or "identity" for no encoding. +# # content_encoding = "identity" +# +# ## Maximum size of decoded packet (in bytes when no unit specified) +# # max_decompression_size = "500MB" +# +# ## List of allowed source IP addresses for incoming packets/messages. +# ## If not specified or empty, all sources are allowed. +# # allowed_sources = [] +# +# ## Message splitting strategy and corresponding settings for stream sockets +# ## (tcp, tcp4, tcp6, unix or unixpacket). The setting is ignored for packet +# ## listeners such as udp. +# ## Available strategies are: +# ## newline -- split at newlines (default) +# ## null -- split at null bytes +# ## delimiter -- split at delimiter byte-sequence in hex-format +# ## given in `splitting_delimiter` +# ## fixed length -- split after number of bytes given in `splitting_length` +# ## variable length -- split depending on length information received in the +# ## data. The length field information is specified in +# ## `splitting_length_field`. +# # splitting_strategy = "newline" +# +# ## Delimiter used to split received data to messages consumed by the parser. +# ## The delimiter is a hex byte-sequence marking the end of a message +# ## e.g. "0x0D0A", "x0d0a" or "0d0a" marks a Windows line-break (CR LF). +# ## The value is case-insensitive and can be specified with "0x" or "x" prefix +# ## or without. +# ## Note: This setting is only used for splitting_strategy = "delimiter". +# # splitting_delimiter = "" +# +# ## Fixed length of a message in bytes. +# ## Note: This setting is only used for splitting_strategy = "fixed length". +# # splitting_length = 0 +# +# ## Specification of the length field contained in the data to split messages +# ## with variable length. The specification contains the following fields: +# ## offset -- start of length field in bytes from begin of data +# ## bytes -- length of length field in bytes +# ## endianness -- endianness of the value, either "be" for big endian or +# ## "le" for little endian +# ## header_length -- total length of header to be skipped when passing +# ## data on to the parser. If zero (default), the header +# ## is passed on to the parser together with the message. +# ## Note: This setting is only used for splitting_strategy = "variable length". +# # splitting_length_field = {offset = 0, bytes = 0, endianness = "be", header_length = 0} +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "influx" + + +# # Read stats from one or more Solr servers or cores +# [[inputs.solr]] +# ## specify a list of one or more Solr servers +# servers = ["http://localhost:8983"] +# +# ## specify a list of one or more Solr cores (default - all) +# # cores = ["*"] +# +# ## Optional HTTP Basic Auth Credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Timeout for HTTP requests +# # timeout = "5s" + + +# # Read metrics from SQL queries +# [[inputs.sql]] +# ## Database Driver +# ## See https://github.com/influxdata/telegraf/blob/master/docs/SQL_DRIVERS_INPUT.md for +# ## a list of supported drivers. +# driver = "mysql" +# +# ## Data source name for connecting +# ## The syntax and supported options depends on selected driver. +# dsn = "username:password@tcp(mysqlserver:3307)/dbname?param=value" +# +# ## Timeout for any operation +# ## Note that the timeout for queries is per query not per gather. +# # timeout = "5s" +# +# ## Connection time limits +# ## By default the maximum idle time and maximum lifetime of a connection is unlimited. +# ## Connections will not be closed automatically. If you specify a positive time, the connections will be closed after +# ## idling or existing for at least that amount of time, respectively. +# # connection_max_idle_time = "0s" +# # connection_max_life_time = "0s" +# +# ## Connection count limits +# ## By default the number of open connections is not limited and the number of maximum idle connections +# ## will be inferred from the number of queries specified. If you specify a positive number for any of the +# ## two options, connections will be closed when reaching the specified limit. The number of idle connections +# ## will be clipped to the maximum number of connections limit if any. +# # connection_max_open = 0 +# # connection_max_idle = auto +# +# ## Specifies plugin behavior regarding disconnected servers +# ## Available choices : +# ## - error: telegraf will return an error on startup if one the servers is unreachable +# ## - ignore: telegraf will ignore unreachable servers on both startup and gather +# # disconnected_servers_behavior = "error" +# +# [[inputs.sql.query]] +# ## Query to perform on the server +# query="SELECT user,state,latency,score FROM Scoreboard WHERE application > 0" +# ## Alternatively to specifying the query directly you can select a file here containing the SQL query. +# ## Only one of 'query' and 'query_script' can be specified! +# # query_script = "/path/to/sql/script.sql" +# +# ## Name of the measurement +# ## In case both measurement and 'measurement_col' are given, the latter takes precedence. +# # measurement = "sql" +# +# ## Column name containing the name of the measurement +# ## If given, this will take precedence over the 'measurement' setting. In case a query result +# ## does not contain the specified column, we fall-back to the 'measurement' setting. +# # measurement_column = "" +# +# ## Column name containing the time of the measurement +# ## If omitted, the time of the query will be used. +# # time_column = "" +# +# ## Format of the time contained in 'time_col' +# ## The time must be 'unix', 'unix_ms', 'unix_us', 'unix_ns', or a golang time format. +# ## See https://golang.org/pkg/time/#Time.Format for details. +# # time_format = "unix" +# +# ## Column names containing tags +# ## An empty include list will reject all columns and an empty exclude list will not exclude any column. +# ## I.e. by default no columns will be returned as tag and the tags are empty. +# # tag_columns_include = [] +# # tag_columns_exclude = [] +# +# ## Column names containing fields (explicit types) +# ## Convert the given columns to the corresponding type. Explicit type conversions take precedence over +# ## the automatic (driver-based) conversion below. +# ## NOTE: Columns should not be specified for multiple types or the resulting type is undefined. +# # field_columns_float = [] +# # field_columns_int = [] +# # field_columns_uint = [] +# # field_columns_bool = [] +# # field_columns_string = [] +# +# ## Column names containing fields (automatic types) +# ## An empty include list is equivalent to '[*]' and all returned columns will be accepted. An empty +# ## exclude list will not exclude any column. I.e. by default all columns will be returned as fields. +# ## NOTE: We rely on the database driver to perform automatic datatype conversion. +# # field_columns_include = [] +# # field_columns_exclude = [] + + +# # Read metrics from Microsoft SQL Server +# [[inputs.sqlserver]] +# ## Specify instances to monitor with a list of connection strings. +# ## All connection parameters are optional. +# ## By default, the host is localhost, listening on default port, TCP 1433. +# ## for Windows, the user is the currently running AD user (SSO). +# ## See https://github.com/microsoft/go-mssqldb for detailed connection +# ## parameters, in particular, tls connections can be created like so: +# ## "encrypt=true;certificate=;hostNameInCertificate=" +# servers = [ +# "Server=192.168.1.10;Port=1433;User Id=;Password=;app name=telegraf;log=1;", +# ] +# +# ## Timeout for query execution operation +# ## Note that the timeout for queries is per query not per gather. +# ## 0 value means no timeout +# # query_timeout = "0s" +# +# ## Authentication method +# ## valid methods: "connection_string", "AAD" +# # auth_method = "connection_string" +# +# ## ClientID is the is the client ID of the user assigned identity of the VM +# ## that should be used to authenticate to the Azure SQL server. +# # client_id = "" +# +# ## "database_type" enables a specific set of queries depending on the database type. If specified, it replaces azuredb = true/false and query_version = 2 +# ## In the config file, the sql server plugin section should be repeated each with a set of servers for a specific database_type. +# ## Possible values for database_type are - "SQLServer" or "AzureSQLDB" or "AzureSQLManagedInstance" or "AzureSQLPool" +# database_type = "SQLServer" +# +# ## A list of queries to include. If not specified, all the below listed queries are used. +# include_query = [] +# +# ## A list of queries to explicitly ignore. +# exclude_query = ["SQLServerAvailabilityReplicaStates", "SQLServerDatabaseReplicaStates"] +# +# ## Force using the deprecated ADAL authentication method instead of the recommended +# ## MSAL method. Setting this option is not recommended and only exists for backward +# ## compatibility. +# # use_deprecated_adal_authentication = false +# +# ## Queries enabled by default for database_type = "SQLServer" are - +# ## SQLServerPerformanceCounters, SQLServerWaitStatsCategorized, SQLServerDatabaseIO, SQLServerProperties, SQLServerMemoryClerks, +# ## SQLServerSchedulers, SQLServerRequests, SQLServerVolumeSpace, SQLServerCpu, SQLServerAvailabilityReplicaStates, SQLServerDatabaseReplicaStates, +# ## SQLServerRecentBackups +# +# ## Queries enabled by default for database_type = "AzureSQLDB" are - +# ## AzureSQLDBResourceStats, AzureSQLDBResourceGovernance, AzureSQLDBWaitStats, AzureSQLDBDatabaseIO, AzureSQLDBServerProperties, +# ## AzureSQLDBOsWaitstats, AzureSQLDBMemoryClerks, AzureSQLDBPerformanceCounters, AzureSQLDBRequests, AzureSQLDBSchedulers +# +# ## Queries enabled by default for database_type = "AzureSQLManagedInstance" are - +# ## AzureSQLMIResourceStats, AzureSQLMIResourceGovernance, AzureSQLMIDatabaseIO, AzureSQLMIServerProperties, AzureSQLMIOsWaitstats, +# ## AzureSQLMIMemoryClerks, AzureSQLMIPerformanceCounters, AzureSQLMIRequests, AzureSQLMISchedulers +# +# ## Queries enabled by default for database_type = "AzureSQLPool" are - +# ## AzureSQLPoolResourceStats, AzureSQLPoolResourceGovernance, AzureSQLPoolDatabaseIO, AzureSQLPoolWaitStats, +# ## AzureSQLPoolMemoryClerks, AzureSQLPoolPerformanceCounters, AzureSQLPoolSchedulers +# +# ## Queries enabled by default for database_type = "AzureArcSQLManagedInstance" are - +# ## AzureSQLMIDatabaseIO, AzureSQLMIServerProperties, AzureSQLMIOsWaitstats, +# ## AzureSQLMIMemoryClerks, AzureSQLMIPerformanceCounters, AzureSQLMIRequests, AzureSQLMISchedulers +# +# ## Following are old config settings +# ## You may use them only if you are using the earlier flavor of queries, however it is recommended to use +# ## the new mechanism of identifying the database_type there by use it's corresponding queries +# +# ## Optional parameter, setting this to 2 will use a new version +# ## of the collection queries that break compatibility with the original +# ## dashboards. +# ## Version 2 - is compatible from SQL Server 2012 and later versions and also for SQL Azure DB +# # query_version = 2 +# +# ## If you are using AzureDB, setting this to true will gather resource utilization metrics +# # azuredb = false +# +# ## Toggling this to true will emit an additional metric called "sqlserver_telegraf_health". +# ## This metric tracks the count of attempted queries and successful queries for each SQL instance specified in "servers". +# ## The purpose of this metric is to assist with identifying and diagnosing any connectivity or query issues. +# ## This setting/metric is optional and is disabled by default. +# # health_metric = false +# +# ## Possible queries across different versions of the collectors +# ## Queries enabled by default for specific Database Type +# +# ## database_type = AzureSQLDB by default collects the following queries +# ## - AzureSQLDBWaitStats +# ## - AzureSQLDBResourceStats +# ## - AzureSQLDBResourceGovernance +# ## - AzureSQLDBDatabaseIO +# ## - AzureSQLDBServerProperties +# ## - AzureSQLDBOsWaitstats +# ## - AzureSQLDBMemoryClerks +# ## - AzureSQLDBPerformanceCounters +# ## - AzureSQLDBRequests +# ## - AzureSQLDBSchedulers +# +# ## database_type = AzureSQLManagedInstance by default collects the following queries +# ## - AzureSQLMIResourceStats +# ## - AzureSQLMIResourceGovernance +# ## - AzureSQLMIDatabaseIO +# ## - AzureSQLMIServerProperties +# ## - AzureSQLMIOsWaitstats +# ## - AzureSQLMIMemoryClerks +# ## - AzureSQLMIPerformanceCounters +# ## - AzureSQLMIRequests +# ## - AzureSQLMISchedulers +# +# ## database_type = AzureSQLPool by default collects the following queries +# ## - AzureSQLPoolResourceStats +# ## - AzureSQLPoolResourceGovernance +# ## - AzureSQLPoolDatabaseIO +# ## - AzureSQLPoolOsWaitStats, +# ## - AzureSQLPoolMemoryClerks +# ## - AzureSQLPoolPerformanceCounters +# ## - AzureSQLPoolSchedulers +# +# ## database_type = SQLServer by default collects the following queries +# ## - SQLServerPerformanceCounters +# ## - SQLServerWaitStatsCategorized +# ## - SQLServerDatabaseIO +# ## - SQLServerProperties +# ## - SQLServerMemoryClerks +# ## - SQLServerSchedulers +# ## - SQLServerRequests +# ## - SQLServerVolumeSpace +# ## - SQLServerCpu +# ## - SQLServerRecentBackups +# ## and following as optional (if mentioned in the include_query list) +# ## - SQLServerAvailabilityReplicaStates +# ## - SQLServerDatabaseReplicaStates +# +# ## Maximum number of open connections to the database, 0 allows the driver to decide. +# # max_open_connections = 0 +# +# ## Maximum number of idle connections in the connection pool, 0 allows the driver to decide. +# # max_idle_connections = 0 + + +# # Statsd Server +# [[inputs.statsd]] +# ## Protocol, must be "tcp", "udp4", "udp6" or "udp" (default=udp) +# protocol = "udp" +# +# ## MaxTCPConnection - applicable when protocol is set to tcp (default=250) +# max_tcp_connections = 250 +# +# ## Enable TCP keep alive probes (default=false) +# tcp_keep_alive = false +# +# ## Specifies the keep-alive period for an active network connection. +# ## Only applies to TCP sockets and will be ignored if tcp_keep_alive is false. +# ## Defaults to the OS configuration. +# # tcp_keep_alive_period = "2h" +# +# ## Address and port to host UDP listener on +# service_address = ":8125" +# +# ## The following configuration options control when telegraf clears it's cache +# ## of previous values. If set to false, then telegraf will only clear it's +# ## cache when the daemon is restarted. +# ## Reset gauges every interval (default=true) +# delete_gauges = true +# ## Reset counters every interval (default=true) +# delete_counters = true +# ## Reset sets every interval (default=true) +# delete_sets = true +# ## Reset timings & histograms every interval (default=true) +# delete_timings = true +# +# ## Enable aggregation temporality adds temporality=delta or temporality=commulative tag, and +# ## start_time field, which adds the start time of the metric accumulation. +# ## You should use this when using OpenTelemetry output. +# # enable_aggregation_temporality = false +# +# ## Percentiles to calculate for timing & histogram stats. +# percentiles = [50.0, 90.0, 99.0, 99.9, 99.95, 100.0] +# +# ## separator to use between elements of a statsd metric +# metric_separator = "_" +# +# ## Parses extensions to statsd in the datadog statsd format +# ## currently supports metrics, datadog tags, events, and service checks. +# ## http://docs.datadoghq.com/guides/dogstatsd/ +# datadog_extensions = false +# +# ## Parses distributions metric as specified in the datadog statsd format +# ## https://docs.datadoghq.com/developers/metrics/types/?tab=distribution#definition +# datadog_distributions = false +# +# ## Keep or drop the container id as tag. Included as optional field +# ## in DogStatsD protocol v1.2 if source is running in Kubernetes +# ## https://docs.datadoghq.com/developers/dogstatsd/datagram_shell/?tab=metrics#dogstatsd-protocol-v12 +# datadog_keep_container_tag = false +# +# ## Statsd data translation templates, more info can be read here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/TEMPLATE_PATTERN.md +# # templates = [ +# # "cpu.* measurement*" +# # ] +# +# ## Number of UDP messages allowed to queue up, once filled, +# ## the statsd server will start dropping packets +# allowed_pending_messages = 10000 +# +# ## Number of worker threads used to parse the incoming messages. +# # number_workers_threads = 5 +# +# ## Number of timing/histogram values to track per-measurement in the +# ## calculation of percentiles. Raising this limit increases the accuracy +# ## of percentiles but also increases the memory usage and cpu time. +# percentile_limit = 1000 +# +# ## Maximum socket buffer size in bytes, once the buffer fills up, metrics +# ## will start dropping. Defaults to the OS default. +# # read_buffer_size = 65535 +# +# ## Max duration (TTL) for each metric to stay cached/reported without being updated. +# # max_ttl = "10h" +# +# ## Sanitize name method +# ## By default, telegraf will pass names directly as they are received. +# ## However, upstream statsd now does sanitization of names which can be +# ## enabled by using the "upstream" method option. This option will a) replace +# ## white space with '_', replace '/' with '-', and remove characters not +# ## matching 'a-zA-Z_\-0-9\.;='. +# #sanitize_name_method = "" +# +# ## Replace dots (.) with underscore (_) and dashes (-) with +# ## double underscore (__) in metric names. +# # convert_names = false +# +# ## Convert all numeric counters to float +# ## Enabling this would ensure that both counters and guages are both emitted +# ## as floats. +# # float_counters = false +# +# ## Emit timings `metric__count` field as float, the same as all other +# ## histogram fields +# # float_timings = false +# +# ## Emit sets as float +# # float_sets = false + + +# # Suricata stats and alerts plugin +# [[inputs.suricata]] +# ## Source +# ## Data sink for Suricata stats log. This is expected to be a filename of a +# ## unix socket to be created for listening. +# # source = "/var/run/suricata-stats.sock" +# +# ## Delimiter +# ## Used for flattening field keys, e.g. subitem "alert" of "detect" becomes +# ## "detect_alert" when delimiter is "_". +# # delimiter = "_" +# +# ## Metric version +# ## Version 1 only collects stats and optionally will look for alerts if +# ## the configuration setting alerts is set to true. +# ## Version 2 parses any event type message by default and produced metrics +# ## under a single metric name using a tag to differentiate between event +# ## types. The timestamp for the message is applied to the generated metric. +# ## Additional tags and fields are included as well. +# # version = "1" +# +# ## Alerts +# ## In metric version 1, only status is captured by default, alerts must be +# ## turned on with this configuration option. This option does not apply for +# ## metric version 2. +# # alerts = false + + +# [[inputs.syslog]] +# ## Protocol, address and port to host the syslog receiver. +# ## If no host is specified, then localhost is used. +# ## If no port is specified, 6514 is used (RFC5425#section-4.1). +# ## ex: server = "tcp://localhost:6514" +# ## server = "udp://:6514" +# ## server = "unix:///var/run/telegraf-syslog.sock" +# ## When using tcp, consider using 'tcp4' or 'tcp6' to force the usage of IPv4 +# ## or IPV6 respectively. There are cases, where when not specified, a system +# ## may force an IPv4 mapped IPv6 address. +# server = "tcp://127.0.0.1:6514" +# +# ## Permission for unix sockets (only available on unix sockets) +# ## This setting may not be respected by some platforms. To safely restrict +# ## permissions it is recommended to place the socket into a previously +# ## created directory with the desired permissions. +# ## ex: socket_mode = "777" +# # socket_mode = "" +# +# ## Maximum number of concurrent connections (only available on stream sockets like TCP) +# ## Zero means unlimited. +# # max_connections = 0 +# +# ## Read timeout (only available on stream sockets like TCP) +# ## Zero means unlimited. +# # read_timeout = "0s" +# +# ## Optional TLS configuration (only available on stream sockets like TCP) +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Enables client authentication if set. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Maximum socket buffer size (in bytes when no unit specified) +# ## For stream sockets, once the buffer fills up, the sender will start +# ## backing up. For datagram sockets, once the buffer fills up, metrics will +# ## start dropping. Defaults to the OS default. +# # read_buffer_size = "64KiB" +# +# ## Period between keep alive probes (only applies to TCP sockets) +# ## Zero disables keep alive probes. Defaults to the OS configuration. +# # keep_alive_period = "5m" +# +# ## Content encoding for message payloads +# ## Can be set to "gzip" for compressed payloads or "identity" for no encoding. +# # content_encoding = "identity" +# +# ## Maximum size of decoded packet (in bytes when no unit specified) +# # max_decompression_size = "500MB" +# +# ## List of allowed source IP addresses for incoming packets/messages. +# ## If not specified or empty, all sources are allowed. +# # allowed_sources = [] +# +# ## Framing technique used for messages transport +# ## Available settings are: +# ## octet-counting -- see RFC5425#section-4.3.1 and RFC6587#section-3.4.1 +# ## non-transparent -- see RFC6587#section-3.4.2 +# # framing = "octet-counting" +# +# ## The trailer to be expected in case of non-transparent framing (default = "LF"). +# ## Must be one of "LF", or "NUL". +# # trailer = "LF" +# +# ## Whether to parse in best effort mode or not (default = false). +# ## By default best effort parsing is off. +# # best_effort = false +# +# ## The RFC standard to use for message parsing +# ## By default RFC5424 is used. RFC3164 only supports UDP transport (no streaming support) +# ## Must be one of "RFC5424", or "RFC3164". +# # syslog_standard = "RFC5424" +# +# ## Character to prepend to SD-PARAMs (default = "_"). +# ## A syslog message can contain multiple parameters and multiple identifiers within structured data section. +# ## Eg., [id1 name1="val1" name2="val2"][id2 name1="val1" nameA="valA"] +# ## For each combination a field is created. +# ## Its name is created concatenating identifier, sdparam_separator, and parameter name. +# # sdparam_separator = "_" +# +# ## Maximum length allowed for a single message (in bytes when no unit specified) +# ## Only applies to octet-counting framing. +# # max_message_length = "8KiB" + + +# # Gather information about systemd-unit states +# # This plugin ONLY supports Linux +# [[inputs.systemd_units]] +# ## Pattern of units to collect +# ## A space-separated list of unit-patterns including wildcards determining +# ## the units to collect. +# ## ex: pattern = "telegraf* influxdb* user@*" +# # pattern = "*" +# +# ## Filter for a specific unit type +# ## Available settings are: service, socket, target, device, mount, +# ## automount, swap, timer, path, slice and scope +# # unittype = "service" +# +# ## Collect system or user scoped units +# ## ex: scope = "user" +# # scope = "system" +# +# ## Collect also units not loaded by systemd (disabled or static units) +# ## Enabling this feature might introduce significant load when used with +# ## unspecific patterns (such as '*') as systemd will need to load all +# ## matching unit files. +# # collect_disabled_units = false +# +# ## Collect detailed information for the units +# # details = false +# +# ## Timeout for state-collection +# # timeout = "5s" + + +# # Parse the new lines appended to a file +# [[inputs.tail]] +# ## File names or a pattern to tail. +# ## These accept standard unix glob matching rules, but with the addition of +# ## ** as a "super asterisk". ie: +# ## "/var/log/**.log" -> recursively find all .log files in /var/log +# ## "/var/log/*/*.log" -> find all .log files with a parent dir in /var/log +# ## "/var/log/apache.log" -> just tail the apache log file +# ## "/var/log/log[!1-2]* -> tail files without 1-2 +# ## "/var/log/log[^1-2]* -> identical behavior as above +# ## See https://github.com/gobwas/glob for more examples +# ## +# files = ["/var/mymetrics.out"] +# +# ## Offset to start reading at +# ## The following methods are available: +# ## beginning -- start reading from the beginning of the file ignoring any persisted offset +# ## end -- start reading from the end of the file ignoring any persisted offset +# ## saved-or-beginning -- use the persisted offset of the file or, if no offset persisted, start from the beginning of the file +# ## saved-or-end -- use the persisted offset of the file or, if no offset persisted, start from the end of the file +# # initial_read_offset = "saved-or-end" +# +# ## Whether file is a named pipe +# # pipe = false +# +# ## Method used to watch for file updates. Can be either "inotify" or "poll". +# ## inotify is supported on linux, *bsd, and macOS, while Windows requires +# ## using poll. Poll checks for changes every 250ms. +# # watch_method = "inotify" +# +# ## Maximum lines of the file to process that have not yet be written by the +# ## output. For best throughput set based on the number of metrics on each +# ## line and the size of the output's metric_batch_size. +# # max_undelivered_lines = 1000 +# +# ## Character encoding to use when interpreting the file contents. Invalid +# ## characters are replaced using the unicode replacement character. When set +# ## to the empty string the data is not decoded to text. +# ## ex: character_encoding = "utf-8" +# ## character_encoding = "utf-16le" +# ## character_encoding = "utf-16be" +# ## character_encoding = "" +# # character_encoding = "" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Set the tag that will contain the path of the tailed file. If you don't want this tag, set it to an empty string. +# # path_tag = "path" +# +# ## Filters to apply to files before generating metrics +# ## "ansi_color" removes ANSI colors +# # filters = [] +# +# ## multiline parser/codec +# ## https://www.elastic.co/guide/en/logstash/2.4/plugins-filters-multiline.html +# #[inputs.tail.multiline] +# ## The pattern should be a regexp which matches what you believe to be an indicator that the field is part of an event consisting of multiple lines of log data. +# #pattern = "^\s" +# +# ## The field's value must be previous or next and indicates the relation to the +# ## multi-line event. +# #match_which_line = "previous" +# +# ## The invert_match can be true or false (defaults to false). +# ## If true, a message not matching the pattern will constitute a match of the multiline filter and the what will be applied. (vice-versa is also true) +# #invert_match = false +# +# ## The handling method for quoted text (defaults to 'ignore'). +# ## The following methods are available: +# ## ignore -- do not consider quotation (default) +# ## single-quotes -- consider text quoted by single quotes (') +# ## double-quotes -- consider text quoted by double quotes (") +# ## backticks -- consider text quoted by backticks (`) +# ## When handling quotes, escaped quotes (e.g. \") are handled correctly. +# #quotation = "ignore" +# +# ## The preserve_newline option can be true or false (defaults to false). +# ## If true, the newline character is preserved for multiline elements, +# ## this is useful to preserve message-structure e.g. for logging outputs. +# #preserve_newline = false +# +# #After the specified timeout, this plugin sends the multiline event even if no new pattern is found to start a new event. The default is 5s. +# #timeout = 5s + + +# ## Gather CPU metrics using Turbostat +# [[inputs.turbostat]] +# ## Path to the Turbostat exectuable if not in the PATH +# # path = "/usr/bin/turbostat" +# +# ## Turbostat measurement interval +# # interval = "10s" +# +# ## Use sudo to run the Turbostat executable +# # use_sudo = false + + +# # Read metrics from the Vault API +# [[inputs.vault]] +# ## URL for the Vault agent +# # url = "http://127.0.0.1:8200" +# +# ## Use Vault token for authorization. +# ## Vault token configuration is mandatory. +# ## If both are empty or both are set, an error is thrown. +# # token_file = "/path/to/auth/token" +# ## OR +# token = "s.CDDrgg5zPv5ssI0Z2P4qxJj2" +# +# ## Set response_timeout (default 5 seconds) +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile + + +# # Read metrics from one or many vCenters +# [[inputs.vsphere]] +# ## List of vCenter URLs to be monitored. These three lines must be uncommented +# ## and edited for the plugin to work. +# vcenters = [ "https://vcenter.local/sdk" ] +# username = "user@corp.local" +# password = "secret" +# +# ## VMs +# ## Typical VM metrics (if omitted or empty, all metrics are collected) +# # vm_include = [ "/*/vm/**"] # Inventory path to VMs to collect (by default all are collected) +# # vm_exclude = [] # Inventory paths to exclude +# vm_metric_include = [ +# "cpu.demand.average", +# "cpu.idle.summation", +# "cpu.latency.average", +# "cpu.readiness.average", +# "cpu.ready.summation", +# "cpu.run.summation", +# "cpu.usagemhz.average", +# "cpu.used.summation", +# "cpu.wait.summation", +# "mem.active.average", +# "mem.granted.average", +# "mem.latency.average", +# "mem.swapin.average", +# "mem.swapinRate.average", +# "mem.swapout.average", +# "mem.swapoutRate.average", +# "mem.usage.average", +# "mem.vmmemctl.average", +# "net.bytesRx.average", +# "net.bytesTx.average", +# "net.droppedRx.summation", +# "net.droppedTx.summation", +# "net.usage.average", +# "power.power.average", +# "virtualDisk.numberReadAveraged.average", +# "virtualDisk.numberWriteAveraged.average", +# "virtualDisk.read.average", +# "virtualDisk.readOIO.latest", +# "virtualDisk.throughput.usage.average", +# "virtualDisk.totalReadLatency.average", +# "virtualDisk.totalWriteLatency.average", +# "virtualDisk.write.average", +# "virtualDisk.writeOIO.latest", +# "sys.uptime.latest", +# ] +# # vm_metric_exclude = [] ## Nothing is excluded by default +# # vm_instances = true ## true by default +# +# ## Hosts +# ## Typical host metrics (if omitted or empty, all metrics are collected) +# # host_include = [ "/*/host/**"] # Inventory path to hosts to collect (by default all are collected) +# # host_exclude [] # Inventory paths to exclude +# host_metric_include = [ +# "cpu.coreUtilization.average", +# "cpu.costop.summation", +# "cpu.demand.average", +# "cpu.idle.summation", +# "cpu.latency.average", +# "cpu.readiness.average", +# "cpu.ready.summation", +# "cpu.swapwait.summation", +# "cpu.usage.average", +# "cpu.usagemhz.average", +# "cpu.used.summation", +# "cpu.utilization.average", +# "cpu.wait.summation", +# "disk.deviceReadLatency.average", +# "disk.deviceWriteLatency.average", +# "disk.kernelReadLatency.average", +# "disk.kernelWriteLatency.average", +# "disk.numberReadAveraged.average", +# "disk.numberWriteAveraged.average", +# "disk.read.average", +# "disk.totalReadLatency.average", +# "disk.totalWriteLatency.average", +# "disk.write.average", +# "mem.active.average", +# "mem.latency.average", +# "mem.state.latest", +# "mem.swapin.average", +# "mem.swapinRate.average", +# "mem.swapout.average", +# "mem.swapoutRate.average", +# "mem.totalCapacity.average", +# "mem.usage.average", +# "mem.vmmemctl.average", +# "net.bytesRx.average", +# "net.bytesTx.average", +# "net.droppedRx.summation", +# "net.droppedTx.summation", +# "net.errorsRx.summation", +# "net.errorsTx.summation", +# "net.usage.average", +# "power.power.average", +# "storageAdapter.numberReadAveraged.average", +# "storageAdapter.numberWriteAveraged.average", +# "storageAdapter.read.average", +# "storageAdapter.write.average", +# "sys.uptime.latest", +# ] +# ## Collect IP addresses? Valid values are "ipv4" and "ipv6" +# # ip_addresses = ["ipv6", "ipv4" ] +# +# # host_metric_exclude = [] ## Nothing excluded by default +# # host_instances = true ## true by default +# +# +# ## Clusters +# # cluster_include = [ "/*/host/**"] # Inventory path to clusters to collect (by default all are collected) +# # cluster_exclude = [] # Inventory paths to exclude +# # cluster_metric_include = [] ## if omitted or empty, all metrics are collected +# # cluster_metric_exclude = [] ## Nothing excluded by default +# # cluster_instances = false ## false by default +# +# ## Resource Pools +# # resource_pool_include = [ "/*/host/**"] # Inventory path to resource pools to collect (by default all are collected) +# # resource_pool_exclude = [] # Inventory paths to exclude +# # resource_pool_metric_include = [] ## if omitted or empty, all metrics are collected +# # resource_pool_metric_exclude = [] ## Nothing excluded by default +# # resource_pool_instances = false ## false by default +# +# ## Datastores +# # datastore_include = [ "/*/datastore/**"] # Inventory path to datastores to collect (by default all are collected) +# # datastore_exclude = [] # Inventory paths to exclude +# # datastore_metric_include = [] ## if omitted or empty, all metrics are collected +# # datastore_metric_exclude = [] ## Nothing excluded by default +# # datastore_instances = false ## false by default +# +# ## Datacenters +# # datacenter_include = [ "/*/host/**"] # Inventory path to clusters to collect (by default all are collected) +# # datacenter_exclude = [] # Inventory paths to exclude +# datacenter_metric_include = [] ## if omitted or empty, all metrics are collected +# datacenter_metric_exclude = [ "*" ] ## Datacenters are not collected by default. +# # datacenter_instances = false ## false by default +# +# ## VSAN +# # vsan_metric_include = [] ## if omitted or empty, all metrics are collected +# # vsan_metric_exclude = [ "*" ] ## vSAN are not collected by default. +# ## Whether to skip verifying vSAN metrics against the ones from GetSupportedEntityTypes API. +# # vsan_metric_skip_verify = false ## false by default. +# +# ## Interval for sampling vSAN performance metrics, can be reduced down to +# ## 30 seconds for vSAN 8 U1. +# # vsan_interval = "5m" +# +# ## Plugin Settings +# ## separator character to use for measurement and field names (default: "_") +# # separator = "_" +# +# ## number of objects to retrieve per query for realtime resources (vms and hosts) +# ## set to 64 for vCenter 5.5 and 6.0 (default: 256) +# # max_query_objects = 256 +# +# ## number of metrics to retrieve per query for non-realtime resources (clusters and datastores) +# ## set to 64 for vCenter 5.5 and 6.0 (default: 256) +# # max_query_metrics = 256 +# +# ## number of go routines to use for collection and discovery of objects and metrics +# # collect_concurrency = 1 +# # discover_concurrency = 1 +# +# ## the interval before (re)discovering objects subject to metrics collection (default: 300s) +# # object_discovery_interval = "300s" +# +# ## timeout applies to any of the api request made to vcenter +# # timeout = "60s" +# +# ## When set to true, all samples are sent as integers. This makes the output +# ## data types backwards compatible with Telegraf 1.9 or lower. Normally all +# ## samples from vCenter, with the exception of percentages, are integer +# ## values, but under some conditions, some averaging takes place internally in +# ## the plugin. Setting this flag to "false" will send values as floats to +# ## preserve the full precision when averaging takes place. +# # use_int_samples = true +# +# ## Custom attributes from vCenter can be very useful for queries in order to slice the +# ## metrics along different dimension and for forming ad-hoc relationships. They are disabled +# ## by default, since they can add a considerable amount of tags to the resulting metrics. To +# ## enable, simply set custom_attribute_exclude to [] (empty set) and use custom_attribute_include +# ## to select the attributes you want to include. +# ## By default, since they can add a considerable amount of tags to the resulting metrics. To +# ## enable, simply set custom_attribute_exclude to [] (empty set) and use custom_attribute_include +# ## to select the attributes you want to include. +# # custom_attribute_include = [] +# # custom_attribute_exclude = ["*"] +# +# ## The number of vSphere 5 minute metric collection cycles to look back for non-realtime metrics. In +# ## some versions (6.7, 7.0 and possible more), certain metrics, such as cluster metrics, may be reported +# ## with a significant delay (>30min). If this happens, try increasing this number. Please note that increasing +# ## it too much may cause performance issues. +# # metric_lookback = 3 +# +# ## Optional SSL Config +# # ssl_ca = "/path/to/cafile" +# # ssl_cert = "/path/to/certfile" +# # ssl_key = "/path/to/keyfile" +# ## Use SSL but skip chain & host verification +# # insecure_skip_verify = false +# +# ## The Historical Interval value must match EXACTLY the interval in the daily +# # "Interval Duration" found on the VCenter server under Configure > General > Statistics > Statistic intervals +# # historical_interval = "5m" +# +# ## Specifies plugin behavior regarding disconnected servers +# ## Available choices : +# ## - error: telegraf will return an error on startup if one the servers is unreachable +# ## - ignore: telegraf will ignore unreachable servers on both startup and gather +# # disconnected_servers_behavior = "error" +# +# ## HTTP Proxy support +# # use_system_proxy = true +# # http_proxy_url = "" + + +# # A Webhooks Event collector +# [[inputs.webhooks]] +# ## Address and port to host Webhook listener on +# service_address = ":1619" +# +# ## Maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## Maximum duration before timing out write of the response +# # write_timeout = "10s" +# +# [inputs.webhooks.filestack] +# path = "/filestack" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.github] +# path = "/github" +# # secret = "" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.mandrill] +# path = "/mandrill" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.rollbar] +# path = "/rollbar" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.papertrail] +# path = "/papertrail" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.particle] +# path = "/particle" +# +# ## HTTP basic auth +# #username = "" +# #password = "" +# +# [inputs.webhooks.artifactory] +# path = "/artifactory" + + +# # Gather data from a Zipkin server including trace and timing data +# [[inputs.zipkin]] +# ## URL path for span data +# # path = "/api/v1/spans" +# +# ## Port on which Telegraf listens +# # port = 9411 +# +# ## Maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## Maximum duration before timing out write of the response +# # write_timeout = "10s" + +[[inputs.mqtt_consumer]] + servers = ["tcp://192.168.31.247:1883"] + topics = ["sensors/#"] + data_format = "json" + tag_keys = ["name", "sensor_type", "unit"] + +[[outputs.influxdb]] + urls = ["http://influxdb:8086"] + database = "sensors" + skip_database_creation = true + username = "telegraf" + password = "telegraf" +

    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 literal 0 HcmV?d00001 diff --git a/assets/image/Linux A - sudo docker compose ps.png b/assets/image/Linux A - sudo docker compose ps.png new file mode 100644 index 0000000000000000000000000000000000000000..cb18095cb9d65b5660b7c3acb6430b30ff8bbda2 GIT binary patch literal 30611 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 Z#?bE{6svCLQiFgW#e1rEi)76L{vWVe)>Z%j literal 0 HcmV?d00001 diff --git a/assets/image/Linux C - mqtt consumer.png b/assets/image/Linux C - mqtt consumer.png new file mode 100644 index 0000000000000000000000000000000000000000..c2376799b36d4aa3d5369020535decac84e8e2d1 GIT binary patch literal 25436 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 M9Ct+29P_>MKf!qpcmMzZ literal 0 HcmV?d00001 diff --git a/assets/image/Linux C - sudo docker compose ps.png b/assets/image/Linux C - sudo docker compose ps.png new file mode 100644 index 0000000000000000000000000000000000000000..bf42bc4b76d71613144f74e501430f4570fd9920 GIT binary patch literal 11104 zcmb_?4Oo&{+COc((|k1bZ`x|DG2gd#a>^N<4f{|;wn?*39aCf^k)0it)IKyt6a{K$ z8Y?x|DRVS|ElU&vc2p)60jD-={D2gZl|(dC6a-8_1^IZ-gU#;jzWe_7|G%!6>nfk; zInO!Iea^YhegE#?eP8}0GUDwwH@*pj!QMV}Fzh%Cwmbw}|M~UT!2g}6(w~Aq%d(C~ zd<^4B-<<+CKPT)vwhspTw)8E>XTJdVZ)6;d&w|0;$%g(d8&2`bg~4`M4~6ZE%}q2^ zpZ@w`^S7t?d!9Q3I`YW@+1@M1Y8yjge|+aoC@OMgStS~_J?DPsZy0Wy7Uj0N!Fb?D zEptaN^IVN!emCN|I?ud#VZ~D8`qwslE*9c{1wI9SBZSn|A?}68D9;^i_z%*poR4Na zH|?2|Aq{UXU+uYhw{WRpr9+Q*+wrmTcVUjuDEBl1VCQ3=<|UQ$ zeR7SC_e|vaIBwLK#jL(8#IV9o&I#gXiH24x6qXbpkc8 z7caumhTvwnVaoNnNY{9BH4gEiP}0dCP}`r-e0zrnZGI9grnybNB}&PjYN^S8n((EW zWA9dGg;Q(Q3REj^a+;Zny=l`CpJENsR+%GB%`J7Tig$NnaBz0Ih#a-xMXFv6b8VtW z#8qz09a=qE*W&YgtLYwppltUS&u9*oxslvcMG&q$Em8rnNkW zg-@nW7*8lo4-6+#;o>gd|FLG0@1m7x%3Tchv9j2Xri`Z_ppev$6tPG+UdEx`2|tyJ6D}P;AH&>F!XNumV}%X z8f*qAR_ECA(%H`U<0%tD!Tx;d$Q-FE5xjGSA!5r4?&mZY8|C$-x~4**m?LR89<#=p zO(wcJm8Wj>YHMxxzB^%>w6|8IMX%PT)N%53WjH)An3Pd$r!A3Nx>R#n8HbJ zvq{u!nvq-^D)+}BakA$+dd^hY3YdEXP$66Ag$TGe{|ip3l;nJHoO{BQ0femL2@}Hv zwCg2L>{HnIms@+Lyc>eG$@82lGoc~!=1a|G#1Tx9W3u%KtF|+Va4DoGeAgLVubMUH znL>(Vl6-?Lqc1It>*zo#oEnZcIVQV3Qf!fQ#x;{!Jqxgzt;=QUI0Yw1agy7001H;C zR^Q1n26QIs*@=RegL?xwv1lws_W?zL-^IF6Yc&O4*XI`x$;wW-nWRYjDuj=+Q@bvz<+Q zA=E2Tg2FE3IA)r$8Ws{Yb{kB*4%$oh1?{7NRXa!z%*$Zs z@naSVfyG=saspVDhs=Psedt_Au=_s)c^i}{IFF{s(*q8Zc1OQp>s?oA0O;Lzm2!pBc`JWFeajS_6RG%eS4vVWBzPk=DNTW}IbAviY4Ao*# zZpdP(Q_D?FlFshNj6vS|sqzVj1oDwU<`$Qi^>~v8|Ghe2YYX2+HasQZ$CnKsvW5n0 zL~eyFYMf-})G8}q`*Y`laYx0Ton!dQQ(*WQd~dgJy|jj)Y$HoaNOV!Qf$N2fP~kg} zdkVX<1qV$h)n?~LpyLgJGsQ}FP{OfT{vJCfQ+C_zco)l$2TOhcNUsrT#_~~mL{nmZ z{qE<1=W!NwTVPK(^*S1-tTZ-xx#h814udK0C!O@yjW>0YHafJ8pHM9HiKhv1nqGh8 zEOiao))vZ0?-xcpZQc9_I}C65jQo;4FSjWco!4o=C$d*G-_$va8qRRZFCrN76h~AH zJ<6HJ-K$A0GkS(BoV4u~al*-%n=fg<0K>&^&gEI_>iMcGZb;%j#>}$F??p_-;^HB< zK`_eq9-*hjx%Yjx?HwWCc3O=)F` zKPtsQdyUFlyg!}lB_dHm{Y|{B#}?B>`}2QRaAoP7%&kHNZ)*2WGJQj?>Mgi~ZvEO; zsolxkhPcT?%Yn03U|Q#hPWmeMt;OPMrD6y2nPip*oojFqJ*N^jeBs}qDCo6+39tUv z&>6kF)a5%rM9T>zwjO-@vypfRZ2~|S?^!U` zt2-xj4l;h$X|(wgU7CIx`Z@oh6QBDz9F}ColE(f<0mg$Kc07!0W8lO6b7GYOSztO<#N!=-j$@xc7@AyilM%2J)*00e)~ z?rDKNz6E-$grG7EmhtYtXqeeGNjn&(lw2L=^8kdUz5z*_GcqdqdhP?7)8?`+y5lTx zxpj}cWkb*8#u4wCMKd**@#lvD5)`yRFWSvrK0|L*TMAH_H=?G4j^uO*#i#CBn&-s& zm5q}O;Jw|y4kjpydCM4Ik^E_|aU?zjb4GyChA^yZ5VxV+C13|ntqzF_dErZ@`bC8l z`I33Z>33%_xwp0SB+2vvWM}r1xl0*&EaYV)3wZUY+gWiyl;6F$JU@1sp$VH4!ut@@ z{Zv0+bt9rko-^vKj9Bsy`iHHXjSGK__|X1Igv_Rj`9Wt=xvxzQcEE>;w6a8nMj)As zIepI?PBQpRp`G+a!tg?r7L5)6F5;^$gyEN#Q)3jN?6*ob+UnhbjAoty? zz={EHI{9|9Kt3dpTRuxo1Y_^gg{xRk8<(E(>}3D}u@8t27G*1jRH;T)D#m&6IuVPm zNvsXR!8zCi#Nl}3`w(A9%T|h8idN0&K-l=*;9kdYmn?=&zKKa(ATV z14VG(4o&KsC?uZ6iQ{hN&eGSv>~~_CTY2km#p7f%Y;`?tBk8-t&#ZpzduIA;BTq?p zu@TsD#D~A1*Rp0&7ZJ)MF@e`cXW=r_8?=ghG{My-Rz`lZwzO##&v4n2LIhk12u%f&-zPptiE3utZ0gJ#$;%9X>0ruW=C8> z@_eP9P+`Dxw;Hw&B@WuQa=+l{p~fuNI(%Moa0_(Glha1>GSz<+ZfBvXm?DdAdF9Kf zk$@09t7Mq3p{>9u69Mv^BtOZ-V0(zcJVH zk$1qX5PJvX^Q4&ev%$Qbo;z8Hq?45Xo*BM$H-sNAt&;C*WD_g7^d8zDri&{#*!-BL zl~MDBlJGfkQsN6>>6v*FKliVPT3P|Nl!h?ZNq%43k&KoT$Ah5xE6iC~&vX)UCLDg$ zM~6%HgQIlgHAdOXPg>*pNyr5MK0zWy(XX_x{S}kTIHtT}=M{E^w+?XlRdzagoZYL6 z6#e887C%)Lea!m7+Ptcm4?#S6C{}yZY7MGmrj{{M%U6GrDato`_X}=|^`qy?cvc;! zRy@G`5`n=KWeiT+>T1QIDC;^c;=_*{TitcxK)ypmiFQX|jozQf11outLF-U1qVbtx zc^qT}>n}X^rcPW)sC>EaM;(fHvN8$v#;BDN^SX3VzYEdi zN}nk0D=RQu9e?hjqSb}rrYw!@tab6I^)+tm^UL#|YqF@feIb_-0}WobTxP6jILq^qTt9%^ zX<9`qluJ$LA`vCNvS#^WlZ8ZhEa$5D;XL@F$$o{*7d%hf;>JdVf=S$8@^0Y+scZZ< zrACs9gD_bvO>%7t7)w$^V91HIo=LlZgV^|Pqc}~6@ltjvhNeiB^_7D(rD?KKo2>>r z3w-OsHXz-_3#=y|x#BV@nY~yX=R3XZj|zH*>!7UdpsawU{yv6+pPmaHHFKZnBKOkn z5EAbY#B#8jVhE0XHnP1TvIqp~Js+7b>Q-rP?c(kJco8*4z&XjZ*$aNl93dZYT_np7}`W{D5_WjqULwLIk;+s6XE>?!vqkW|)m)n}^G)P%@o zn~D(mvVu^dYo)ri(n)e2)i0DWY@Wbp{ZFQ_^}{~6AyslDcFY3aqTJ63tMtrZ-@yF1 z!OpHX?JNhY{vJEi-t7{KPatj|{pn1CfVGRJTxhm*XDO?G2qAGRp^MDK2#(!kUl(6u zj^)g0UJ||6j92p(Qx7Pk&)m2t)@fd%V>HRZRiXS3B+oHPyQDE(745N-7vz4&9wXs*3N&0c#gH=-xmg*M~sS=gUAo+ z@gonn*RxPdG~Lx#4I}AKX{V1UVaza11dy~Hf=Ue`Gt;gusBw1)k}>+FIboV{QTvwU zl6ZgXSG26>SuN(HLJ`C6tV0r={yFm$ovnMe!bNr1o!>V)W*2J!@bdA>WvfW82BdX^ zP8!cv;d8|t5ig&ng`Z!1Dmx1J4gO4+OgI=c7J0gZP9c%e0)%8!Q>4=LdxD0YqqTMK zG@5xxL=vHe5p^T8dtx+k$P6?oiIPY2&|M$|$eAqoh~Dj8ZGVecD5YfYB+dNAjI$+Y zD2Rc3H#pm}xv{P{qbwnpSw>U6xG`JW`@>%F0nKl<-Jnts-hm*_eA*yC6t~^aP>$*ko%pDy5o-?8h`kgva3xKnUaKH;f=bNSriaRemcVkR^F zZp(b6vTUFp6D3gF5A*E=;PhBpWibyR3ATH@6pS@r(rgyyi_Ny!R|Dj2ID=>Pe4=KO z*~EgLI;H~Cd}=^~jZnoji!6?+Ug8Ffw#kcau4j2j!+0lz_RcM~H?p_;%X=GELom{X z$Xqm@ywU|l^ixcqx;{&DaTNImdDe&BZtI@s^>f5*gFL5xa`lzwQ1F_ zX^vSc6HVN&6-2>NnWNI_C+QclwS=B{kdq;WgppT95QOg4ZkP zE$(&r%b_>@G0rEGsk={jmY~5L@e|}Ap6$#&*9dgz&E-)qF9aLBn<=EgN69Ho2W3rQ z)_0|fy>E+ePQptp-KMlkh7FGLDaTJCR3Gp+t0KV8e6KK^JnWmb)9CoS(2}+H&qA=E zauNS>>uuTl5696$JKNX*;aR@U7W5O~hI(F3{{aK3u5 zJy59zdy$j5u^?bjTbWm;QS3x^PUahR1jk`bZ(KZ*c9HX}_j=?+(vS_39drzx1bYT; z01vn>_&hLk-Tlq?(pq^TEab&!95OXhKce#ht7_UK{-^a2t>1}R9l|GCFC>XMBrk() z)zUVwr_7%KmJTQCYGy<#i__2)%onCR_7CWM6JdgYt@RsQtY1uDZN&uuJIKK z0n&%(J9|aV(*V(^dVg6FZ4mGnF%v>^MK8nDZg{5Hk`QMCfJl2+{Ja2A`f>9(*9KTEo@4^OX|ZnDns7i_cH@@w zFSC4JS+$;eZ%UAhvl3Jlw|4tv7DR~cQx zq{Y(t7migbe0~zhDRAPfn6ur@ZO5(n@E-wBbKxNBec&}OEjlNfVr;dIE{Mi~!rqx} z4ennYRl;DBu(?H3w%E`n`SSmRBxt`7^3oK9>Rk(b^2l}wv^=>$m_IVOM_GzLT(jAm ze>3`QMWqwXB#x+CB5_NHI zSd{{KHgZ2&U!WMKP%B8P)R4Rm#V~-SB$^m5kYWsKEh!J+!T&2_`Vw_y;9;J^C8T~e zflq&=2y+RpIuJjQG5MqdML((XaQ*}4d-~BffXq<)&HpoG0vJ4M!7q$booJBgBa#N6 z09OrCBbx95CH?b(CGh3zSa&-#l0T=hZf!XAA_zAR%p?#`3^4_N!#v3ecx)>^F_xoS zXHdQe=xDtv6)n2$ye;+)fB+6@CRVcnA!^j}(^+Wil{x)8iWDc{ciD-()M(As4FKLi zD|Qx2EBz|>$~}<2fIuB0%{1eU9ZOSV1*{*jj_?bXUHmD)nJKT36!w0cAr&PLrv4Pe z{7o_tZPg(SvJu^mzrSQ0sTT*tn6NOn@&``2u((hO^j(UI#x=rfnw=SR*OpgzQb*Ab;PO=nD0*WFV1b#=RQB8UyB@lcOhXJ zY(%-lho9f34!Ev7(*qh(KYv^Hs%ef#}ypU!4j&uy@1BgD=g+zM*CyIHRL}LUvcG!)R z*m}o0#$?_e1YxMYr=~PSfP8n=d67#0WrJ(JuOu8GnhHCt)-Q`%v%0TNI*m zmGQ6UtD6IiI{0ju%qwv*f^f;Q3L(&R9-5z)K5s&^6M<2k3du|XX9IAQJRi#%?FEIPy!?Dk}d<&aa3t$SF+B4a@KXxpe z1=wi>eX=`}1h|SS`x!$Z$0!U zl5;7o+6b}GthMyPsmLPB;TQnX02gIYH^bWk!{J{3Oe9{xm?8aO2Z`DIH}7L|TnCGC zlgoG1P!D9sDGA{m$I&7S+YOOXfD79jxWW1~n5(QxGdvyUb)=ept-{N^=_uVTB9^~P zp}Hl)mB?YnEo6yB)ITr(7f5PdbdTWv?UuU2fn=-iT6(<6Pl#fr(+ARz335)J#f&wP z#-vYy=iZ$!W^)$~Te^kC%$sw4VnDkAQmCAc>Pu;Er1f`MKkWt6^;eJX#BzZC-d`QU zh9br5ll#E_YZPFGXm=36YIcGsW9C_y33G=)#dKM^eFQiN*2O0xn@V|Gxm(zmvkSX| z4Vx|-xAuAa>jTH_L%0Emq8cti?1%7GbpC_VOQ8<|rD4!@ITf=FSXxLE!1CYAyBA(GpMQGwWY|T-KZh zIp&ua9;cQK_a^GsSeru4xYZT;dwN}v>XDixGXWBTbrPy%~oRVEM@{#={QEZXL z+ruezLPlGi3bGY+{n|@XkM2g~b0hlY_HICP8P_($vjJH07R2M3Ogoe^xfQRb^=|=4 z^VeqrC{zIWzv@bJck?fiTQ>Vu*^PP43AF@g#4C%X|Bv2f5j*hka;?2Z|GL4DRt=`- zEF~+IN5@;J#$a%oH?o#Z_vP_(hG`0goLKm6ilZ{q2{I7>0HOxIxB6Il{K`%aFY0?b ztzRfk*&(xLDc7g~|7pNYI`#28`47g?96M)EN&wqYcwff;~XUa)C!@$H!&)8qT}`3lb~|Bty;M&YPtap(&z z6nxL@fwHh;uQ8c+50of-bzu3|i5ibzHHYx+kTXS|HniC_tvcqM3>X%({Rdzd+`OL`>WxKucN?mx+ zd$UU{2_!u0PvGQ60Ef*BNLB|B*r_6WRSZ)1tT)Grm>gOxk2yx^IeFH)3&AniNq8)FkTCkhwS zMO!(UVLzfNSmbZPF?aR1$0T!#&1@Ik<oTo%h^Wf;Lm!Rjhws`MqK>qsv&#T1Rx?<%l}p!@K03(=as*?)BWr<+cClCn-=BN52h^mJ;jRGHEUw?@lEDENLr|<5X%#s(xJ>!zHDe5DF zx9__-r64HL`T}3P&k8Zma5TH&}Dedr7U2Q?N8vE+&cMf`OiOPyDIf2QZpIY#I z!3zb*^z#x3Iu&G(n zRgn7Xf2<6pfV&^-MSmosA=@(YuNdn8tp*n=wAzlM)@5ISMm!WA8OHngcYpXVf<@L& literal 0 HcmV?d00001 diff --git a/assets/image/MQTT Explorer.png b/assets/image/MQTT Explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..e2aa9f5b035ad73409cdf2de18672d5d54eef7e0 GIT binary patch literal 83302 zcma&ObwE_@);=tV0wM#F3WJn_ihzQ2OR1D}gGhJhFoZ*jfJjLXAYIZ@gA#(|P(ybO zH3$q{-$u{#ywCZ)ujf1e=rH?c@B3bPt!u4K=u1Ue;%hY5E?v4r{QQ}e%B4&A{+BLY zeoTN1d}B4PVsq&d!=>j^5^5ee>!-)Ql)DY+$YZ(lH>doO&JnK1&#S5)*x9=0RbVt+ z+^uzs2Ce$M(joCE+_#iESPzMp6l(9oCI|_ba`mpeD}KB8(()aPKOS%V8^T#K4czA; zP1RuDwb{(I@r3;@$dt2we3!ggk?^pw$cO!|`emqR@pzYW1In7CrhfgcsB`1?HW!A} z?`v#)Jhb~9GeiE8+cD{^bluu>@|0m==vjSi<5{HX#3_N^ZlvjtT0;#t^@IKG0uFNb z$nPbH!me`zpIy@ki1?xfpT4uUcI4*bupY~%wr(^}(bLAxj&6u{W2Y0sx3bW1WZ$|` zCwofzcs223=lRJ{nL&-={!rOROnjXFa;>4SrS|sb^p}cv5JK{hm0JfxWotuq9!mw* zdW#Qe$%qL#~XO#QhqsCj@}+eLv~Om!Rg^s*F6a3Mf%f9>G6pl742 z^23-@BZm_=maXLV>h`_cLclLkX7f9G95_(@#{}rL8^|ohOZZTI6GOknqwgOZ{SdrK z8aoZt$DH@XHw?*?qxG6aHAgB>!X*WYmT%8>@##tVnV+0o#q zs7u5-5Ij;nma#Dm;BQI}g=sYYXqKoGt8@l=y9KDpdN>5a_Jn*1?f(+b8iq_sp9aqX zN$4qQbdxkBLEKN&?cE)?*&OdIT(0x}GVKW2GNF}dh~{A&mPDnBEoi^)9+o-)j=!R>)9l#qPcSf$-W@1Lga9iQnB zPhrb__)gbXed(~fn-h*Z&_=eg9K{fOoF`ZOGgwIBk#sxPF3jfQU@_#Fm>oKU0N$EM z&cG8cHsy#Ey>G~@*}I(>%x?j9VIrJ?|G-aa?)54=dv-7P&5j_cUE})Mpxf{dTZQCc zlf&B_GCK5s83QA_F=N-GtHFi9gCCuQFScE2Kke1sICa>|H|=~%;Y7o#nLpqIXaSc~mfkB*JXo>Q|wH=WB=q3|K zDabD^0vme*614u5uN25cylFZjK=xH)9@u$c!rHSGCq(!>oR0Ow!=Ptymxm@d-b&2` z%Y0pd+uuHEAI6_RZD!XMpMT>#TMU*wntqHOcNg_;h8yvnxU^K`6R({|2cIvtNpc@; zSWh=t&opF)ZH$utA3CMMr;AeHDAWcvGG>}=dJUw_Kpp%{SOM&!aU~(MLdM$u8)ImXJ2N%XtxPh zcXxLqMA%Wee#17e?Kb`5zJu`IL2h&r>q!+=)zs22qqIKT?OF5v8D>9uR)FIk{$*=9 zlE_L)32Hqf**k%q8Ay;{`u?qvnysX6LsOH)duGW{cy`!PQgVLUTJ*dr40G-Ezzk$F zKI!T-r16MA9r`nUKE0rZ8CODFrmQI}<1@C%G{P!Ae({v!=Lr!f z@I9`Z2{pl;j~9WUUgm#X@ENnjoV{?^jR->}z_ZQEFRZAB-&@7j#5GJHUp}AmzW@K} z{Eo;7^5;~NciyL6b^Z95YW|MH{QlJ`_jB0l=^1{o+Cy*V=pT0!B*g$B?3_0`r_u<% zQdN322F3!`wg(vg4yV}BBC#0V(#vY6tz!~l=zN3km)YWJ=+2(e@Y#%5<6cSQ&ou+| zd{B^#Y~Z*3sp-j6PnPH?kj}@sEPM87p1L|QcY;OWs=I1@yuR}8x8R7xvZ&6^Vyz=o z83xlE%M)0CWd=_EP=&}-JRw5y!fkS|0^yeh?2?M#v1L8?46;rOs$I|T?AV2js&lk$ z)K9$MFey7(?F8?aeLZ5dCl=~9J>-f10YTpVi1jg5C_rwOIqevrHp`MXIbaV}ttj*y z+9ZTfE%o;@KFpufs&arzh{y~yb16V=gi8~UsC@OH6lVXAsfzp-!R{K=j>xL!tEZ1H z;ioL8^ZaGw4oGQn_&M=3baCiDw?W#<7qOG^*^3jE{tRDQGHX?0c`cJ#JnC$EkGUF* z1>$MV(f2gHbC@BvaejEZ24cbzUE|qa{#4`~yOk#f-s>o8O!-uFvgrJJu^I#RoV0DM zS^Y?ystq#~>AXGffHc4r zWZ8-@x7edqintwZC9Uvvvya5NAqR%2Sodo4GJPB|yrkJF#koz)IPqpayvMz?ny%vD z(Y53G{ymh?N2-ohN@4jW=?xOK+;g*m2k9N|kBR^u$|NHc{R7>MTIHXE51rihvZ&gs z>YqHVnfRo%@q))FM9bN8G!{1mEsdqk*SfwX5|RBP>B1r9g)cI5Y%L7LzhF8rJg-z4 zRVk~PTqfisFu~K~EH`h`uPPpYtj4P(G|8GFqD#K_yppmnS+dj0G;?B;YuwUPkw)+h z1KP)mz@Q|qnMd?W1y#-RQ*lEbjX|HP&FiA_^Xq5Zl2M(B?iy_Tya{1Zjl2pt&=jSN zRNN^gaNWTR^R_xWE^x((aL4RG_nt(YF?2kqvH5q~IVX76V=rXyJXk0s+l{zT0SK~-FKI}_Z!!@MBy3tA-Xq#-F{kdvQ?Hp* zW07E{!cu11@BP(rm0*zvT_p}kyXWjWN2g+o+<&0^w=yO z4CYMF%Hr;~kUbVtL6@S36BQ$JEkVXrN{pF9m^H;b0H$&k`f zZ!$MSG|e6mj?{l%4UxQ`WHx#qZaQyur2)KQt$G6~y$Ubs7D-Y)<8eNd?>Z8&D0pRQ z5v=-MV*da?P$19Tv*`^ClSOXSHfmS;a8DV(=)sG|vYhwpv9UlhKpfM%xHs&c=JQc; zJ}-mC(Ts75R6tY$i%Nk&urGqLpAngp(BD5x<4))z2~tGTVX=TjsX#|nv(dgk*WyJB z4@-oC6;Aegea^$jWes-hNr0>((2Fo#C?g=Has~WH9|)HGbQMQWhPY*|?H@B8=tzll z@`>Jnvr~6pvQ2`WL9FvdH6%ZEFED=B{g`0WqVnUMRQ;z^M~fg}utVJKJD(NCWCE&|YgU|4qT_|q_31w+G~Kv8Li zrkt$&k0NPtR#(6-c2Rw|>A{C3;N6?lnzLdxSj}RhrjYQRvCZeJ}r42 z8Gg!cx-uBs5UIZdWd%d zsW!OczH`Z=@D0iuAqxQ<%Zf!B<@e!2s4!_+imLp>iP1-3pV5h7C*q&Ig406@eq(vJ?&ugc_w5!hu!b}HiX7C-f*Pt7J!e&FaY)e@v* zo1(_d`@XEpQ3xygLEH>BtfTe2I}*!Y5r5xIo~{yojh})?yn+0-#VKDSUZ5aXC9GE^E{b)b6Rp)aqy56yQnltUEX8lmA{1%r@7>r6(N6Enm za;NL->@#r1GdcFN7yIUW7WE1r=d0)7(u2<891#GjQPowo?%3tG2z~RkgzTbTRO;|c z3>^=EVIUyE8I$Z`u#4WFwqEZeUwk@A(h8buwl11qZSK4eOwbHbh zrUk+m@e_A~5aUy9si z(U{2ren_#)rtVjoBpBil(WmL_`_r}htgYII>m(>mw;CGEH>5f2r ztJ@c4*D%PrB60qm^G5LegEveuTD`Es2B$&(3p_$feWc3c!V>N1E%u7WXql+QPY?WJ zQ!}6NNlSeI6~$$$Vb&N&BvVv{52M_CkyJNM5w9zdUjd7>Qb@Q=gFjg?$J5g5_uBpe z;CtCre^pEq(LAzh++;ZVK0~H+1}ydEM||HvV=Q$7q}}j!6H}G!bqmY&+Uh=EI&xmeuY1`x3Zw0xKUq_>~4vfUHBSqR#zMb_hABs`_Sa7d_|>&=jw1ClSR7`X z0)MC)9B)2W)|r7NdQM>l_6zjqwwRcIoVxZm1RoPA3yc2Nkc}l@H_^9kl_~u$%VJLHO)E z6`3p`fQGpKE8PE1ofoxdNS70)o26AksQ)qT^MuQRl?u0Hl?P<0#_Jtk(dB*Uyj&1^ zb*Q7vW{r&>D<8z#rqMq1Ay*k<6vO;MwB`vdqU!-64)iq36m;0mgoo&x=j6Q}sQ(@o zp&+@ujZhX((VNzHM1po7Qj>4Ov(gpcz~YSCIWi&RJjW>=0*Y6)qUUAlBE%c%g<4Xnp9h!>U9@iQ1%7NYXn5IX#&Cgid-F5=7 z@!`@2GlB>0e!5AsyODM}J1$1Mvr%{Uvq&Pd(X(w6PnMmiO-x^1tE6WAuGb3YOgO$n zV3^SB_y7{wFT~nRb~QZi##6XC-bsW2V#$j4H^JhFtm&K!v0`bGU{w}3geG*KFEK<- z?ql7x?Ua*N^BU>oLKR*yDX8&B>D_YdcSV6&$)- zfqwDWSbhu9%SU7v1%OAw1yjXx!6-15Cqv2`HsRzC;E*8+2m#uC23L5zAg(`OVQb`DSi9`&y30-yRza&dz5R0-|Lh2eqUPctbc+}r%wUHf zjWBryOC^NDU}>Um(OU%xExY_^(M>pHLoh%^MRpF}DZC?b{HgP+1krr5h=rhX4ZoB6 z9iuzbq|oO=17U%r_2t*Ix@5%-m*>4D2fU3cI2W0(5Coib#n6oHgg&VDqHOZ+?w~GF z2|;h%8|E7kO%0PYn{uGu?rn9f6y|tajnpk3EinXF91nirxk8R6f5WvU6D6CTgXc|G zVU*$f*bS%}EcfxTjg2>T7kWeA82(%*@F!!QdDMc41zANz zc0_gtK`C9j5!`YLlxEg7?bQ>&wSjKx3!h)R1ji`z5}E z*@Yx_EAf-7+Qm_>+Ydd!EYjY|OUrK{)*?Vw0Y@twlA-gC*_>kAuyO$aji>LVG~jKx zJQysVN9K^b;Abgl#o~1Xz!MP%6D-H0YHA=sS)2_wbA-= z<$jd8Eb5`sq2|k0#}Ly_3AsM-%XU=}!=k}npBakPC|&y+vqm3BB+l|jn~r$#(0lD4 zoZks^9NzdUv3%T-BZ~I|<|lar35PMg+_FhX`Zo+aoJ(`k$8oULb51v@w=owk`~pv19h%WY*q`P4{AaFOSQQ_BK2Oq-9BZA+6^Ezoa#}Oy|Og;@7iH zVZfg}#ua?GMw-9X!_}p&pBHBuxGsU58ou*RQ+%IDs6oa+Mu=%Rx>DOPI1nh3}Hxb2tueHaX5465A^FK;$% zV}h4lJE$zIdcFWt4DeGdgzbrrN9v2u!`a2|UQTf4({_qKA!2N=BY2$!3uM-1oM9ks z8W_RE7hR=WiURh;klOU*+(OWACH#m&H7v z2Q>pZ7TD!e+D8L?va>dl7e3}Z z!_Jt+5zzPtH+UFOiMN@kA^--R^xhTRL>MA_+I52Q5)Og*C0tU!OLz?b>ti}OK(|i+ zhb0UT087bj4?1(jA%6O&yO7=!#J!;4{*MRz^;jwCOZaq@qZ!A7Z*YL7$6sInKN}-R zxden8;{UK=Wx#)ArFpR>L>8ofx{IH9-;MSk5@MRJCu(h5Me~qi>*>5Te${GuYu04m zHhXIf|9~D3BL{}Osw!DvD1E}cVZLv-?7J%acPyA(s#0v7u(o%Aw)SXYO4YcDO0gemcKOArNP zR3(P7Z($k*yA})Cb{e!;s)5Jp=tF9JJ8E4{W=E?d@#k=aY4(zk}_) zP3rkUQ`c8B9CNnA6TEzr^nWY&_YM5WXUo4sV0=xLruMqKR zDj>q7_+YQdc6}ONPp@{E#x5lez2s3HBuMc(@ z0LXcCh37OzfwwZB^);`4IW%{SBQX2@-s7sO;>tZ!QHvsL*PE#J9beG>{?Ya)wpH1C z8KUw|4H_@mlC*1F{rY8>#qK2Y{LxnZ#c@Z$6=eO8@JW9wodLH>kvy3CN};uawXF8C zU>1*@^YN7~j!9E(WA&T|Af2^AySO4VI?2lF_wgP>IoW#AFZb7rizzL142=XV)W2Ap zcGBrKSVYZmF`Np@J=P`hkDIKsi_iNMn|}1oT;$K&ctdCcq@NS@fRZI!_D#!Yb_%Ut zLfUfgyaX)dA_ZMPe^71O?sS7aq>Z^U8Ul`V&Ml7W)Gwnd5SRR}n4-T7?f-E`AYg1Wldi*g>K>?P zE5B3~{CERVn;qk$!8X!mrh#v3Eh{g+IkqmRKI<0Ec3QHcRg`Nlka`nbLHVID{Ux5` z7m&`?$O3UakWM(PDwX&(_1(ICz#G}6Ld^bT4wrD1NeNt#Z{>K7P&Q?=y6ScL_OVnW zi|``1Ph1*Kj`wVJxGUWH9_HukLBSOTs&{n*jdLTU3sgG|byrb{A=NR#I*oDnIE4Z` zdsKWvoGWalVfWHhz@&SctNOBmbnbk6|3i|Z?m^o_mN_job8fwfnZITM z;)@FJdpIY1eM_!HWut3N$DLo0RyT0EE(DJ0>fdF1R_V6hFmg4I6-EVJS-VTsKxb;5 zK7Zp)QsbZPr=DQKV?G=K64YuRYsj&BRHU^sLp5^kKg9Peg&D~7@okU}B|7FmrKKmh z)8}XVj>z=BhZ~!0AL;(AMQ=h1418xJ^ytsqWIzrR%)klX1pP_w443?Kffbod!41Yd* z2D2Yf#{4`rS5&7q1GmugOMXj2N%)jz9^f(|$q zh~__>{9niFgVKHT`}2JQfRTo9*#Ez_Xpe@kJR$g_wZYMVPXC)@g<;kRu3rD+eHdK+ zOZ08nhRkIPike=j2 zN}}mUc0|)2#yux*@0TwL3z@Fkr=~pmS)EDNbnQYR;!!ugtjsFAzwXO6rqCrd|sQ8pP0JM9^DFb-!kjooYXI$ry%xE zx_vv)?_Xw#rNYTbhitu1DgK8dj=20G=RdpNc@jNfV-q|1*(`Q`*t@&C8y+5x4+8Uh zA2_J04n#4_>gec1tX9Xx#WBl9JmKM?6ZJm$>VFwn1+4Ww+ey3l)sBviTRT(}$HC@a zfpR+CAMBy(aBa)IEDSh?wKWx|^AwILusbJ9H z<*Kee)JE@H5820@9`F0^jheHwv$JA#t*xzJG*+(gDcjlFQtImJ=!hP#mjf#{ry7pu zBgKmI^K}}$b~g^{=Ikn<1bM;vF8>Rti=h^pd-EI&`M2}!)R zV>Qk>pL-P)6xt%`si$fh8cqlERC9K9Wo2b^eAdutQftK&!J(R?_~RTT<_GH#0i zWbe_ND#F9Vqg!nUHAPME*UVl7je9hJ)BiRn@lCRj9fnxMKM^=Gp0NJlXq`m#0A5^- z0h9-fTCgf6lkRB;2ovpiv;1UPb#ZfZb8#Ucht9QxE-ftqf*nSoe13kz=R}AK@izTB zS*Zvs`d%rX*RT*$=y!N#Sc+_y$V`K#zqV{mRNz#52z*-k{Cwc`?Mssq|0t~Bngs7W zO~>{&#@E)?NNx*zV9|Xjl*X;&_0PSNqI{M)S)roPBNqq+Vr{+FmnjP@(K0k_gdXob zE@^RjcQINb3AZ4a5&hSx8sr#K=Qn{T7ipE>pLdmWb+et&hP{he_J>pdk5~B{F#Zf< zZF@_AZai7!1f(bAxxE1B)#RZ3eW&QsXpIg}9~Z;X!jEX++Ht4hnTn?7{x^L3iT#%H z$MWR(`cKXt2bo{izmqKfWy1QF`#W(eXYJ^uj>VwI&ITnI< zV=U?asbmnYeX)+dt}YuBJkSrbzOL4smXa+nUiPRj<4RQgJn n%b(Wz3$ioy2~N2 zF9@O_@jg<5R_j7<-($p5=C=Hq%l`6lVq~$mFXUeM0KqS@$ME{!1Id^s!DPgeR@XnI zz0@Yk>*07(@ktivf1VD1Lh#P#ure_*5s+eKMMXOSy12O5@8>e}hOEYBiTCcnaO#o8 z`s!({kBm;DMP54KQh5!24 z$%`<8y@J~Z)d10)7S6-&$4ftPafu{g|3`YqUh^mRo#;m*kw6d|8ylON;!ttGBS2#? zm>f|Wp>>$-BGhP}_8X1Pokh}`^rXZ@V7LNxJ}o9Aq78OA108KhE-z^JmFD}&TG%ve zm%lzfVlPkqQ@**pOUd-p`%r`(JvWCgv6%%78 zBvYLs;6NfZtc%NW`LMI?7AHg5nlDF0o}fiHB>6ICrT$*EZvw)D5!&a}m*8Af8QnJ0 z!T}QO*LFasi~Yy?<&Ks-&r`Mc6RcXxMA8*j;cbM5xK%(CX@%Yf%7rV5Wv zOw_w?PVs4$gt}xu7C;+CXHz=J%#Pf>KP;|E=fdJ_5!Owi8;LrBzL1d&hNU*Fe!Ma0 zT|9JqSJ-Ye|8jPcsJlgwzNBvW+T1vSilVv@3c^8iO{mvzuD|{#FC}lb65DsX zog{4Sv-o{wvp)WqWAJyZe-6)~U+V}?w8>wV4bAH*{sg}3rSP&R2KR4-i6j`Q{4k5? zU)BY!|GXw6Y`9-Fmy%sHjdI#czHTI+WpC0oemv%Ke54s`q@~e;)fdp9%Q?%~f8NGO=I8=t?05WF^88f& z$ip?~j4IkL&p^0+O>gnr3+BnTR@CYZ1IiYL9kLdF^m=5W*lNH!8>KknN|dd!;ZC0) zooQLbB_+DgkgwS}W}JGT%~V^*y2~|+Q}*^C+*3sqTwbf&Lyh3`7hfZkZJH!xC1QCQ zFZm-R8QzjeH8Nbxj-@D6VpobCuLz(>@J8SYFe(N8=@L zx_hgkW+w%*KWLX%TqHW-iILl2C|LV?grCLu_>R_h+gukm)1zW=!7Y&B`tjpy4#Zx|#zV!@|7%Ir@fP6X8!?}hBqARJ6ey-jrjO}&^R z%7=)VILi+c!Cdv{AM+*W*fUomQ*m|VH@0+|RX2+&rl8<*p!wq$bMpFIgk*iVS$8>L z3NUq7gz-%-j45MET4KXXjF3xH3}E`2rDg*I<Z)RLf#Fqo^#%~W$i9PM^z&-(C%U)# zTWW$Ur$=+FvXj`%?FF*(bY%zU;e50zhGtwVehR&I~L_xpcY{npNW%fF0>-BSN0@v5~@%zBs-31rK%Hgb81-X;J97jboAtu4;!do zQ24q#Tb_maNks?@BW7{{@9RapEL8(%zmT*gt0Eb)zjmc44PkP4c6uC1CjMSN1vn#_DeLLwlz>!Q14B- z7RykrhVmmu_)uSX;TO{PmI{C0nKG`|`1-S0*V^uP?gV3@WKQ-S&t!glTf{v7G-!d( zb!j|+phMIh?u4AkuT|X930v9GX9oiEsL|2FoQH$9tN!YV^eK_x1~K|%RC3qX<>W+a zkE^Cu-#a#5z_-e-yz8^5qth=OVJ4 zJt`Sv`zE3ux4#h4>zBLR@MYPC1zKenJN3n&+tOYtiOEG}%nDkutOFXQtU`s@3JYjB zuirH{;zU=8IHRFS+bGst#@d6{^qRe+Q^?E(iNWC$x9rvpU?Mi&yhFjKK3pTLWlrhDpPcD(r(fcu)JbCP+XSJ%N_m7uI|)EzzS0KW@?P z)P%6iZ&fWmzRzgFePbCGH#^=DZ#>8LMgIFqjnp|~GqF&zU|&{nfO&t%?#+RXwOIPp zo0n{xZwqBgoV=A{wycYrKO`@Rfl6~y_ofUt4K-5eCl?vyHs4ac?~{oXR`t4 zoj5#?DaW1ZLalO3%<3*@L+MEtUtF(#1LF0@(lT4zTSUNTDqYrx-fO$=!w>c94tFW7 zgA_kH?UT>9b^AKcj&)PkTBLqC*vK(s2lHAU6~M3U4+LM^iPP_S1GQH&mx z-^Rzsg#-nip0_XpGyNc)pr`IGE)~_))m2rzJUq7J2?IRK+a6VHO7#a|EKtjMc|?j) zf8kSYmDo32PKc27cFvL&6q<*#tw{}*C{bDJMt(<_7j)Zywb2b9wk-p@oHJ%S@-{w( zluDSiRGHF|*_)4r2}7%D``g{lXUc+NUiKTVLzG2jui&*xM2<`q=REFkp{v@)Krn0& zfnk;1FH-;!M7|5(9$k}GTIsQ6%ceD2GS23lnpb>(2kgSKW4c_$*J}Q?1$b3p%qh2z z`Wh7}6TJ&csy9Oi6+?Fjns-+<>(#FG0rWaeVm_*gY9RBLoW?VABm76?lWoB6jumeP7fNTl>1(zPD{zHbW7CD7E=cYC=ka$NO4J{58%E|0G1Vyz z9hqKnh^Tsr->^1g6xCk@q!j80arw^$205fE!-cG+o(0t2$2v_G>jRkgd6tUj-8oX4 z+E@6KqobZc#jWi#JyxAr5hh@u(BUV}%ehA+~>Mi-om9EIyE zB3Izj&^6+_xy%57l18f}9~FpD;nSTU`4M%|34DoX2Q$~^=iX{CF+!=b=@d8h&CiVj zzwz3desdGFken-+t|ttFbs-iadAbb7hJ~iQTRBy^c-f2jxKJS?V(Qig*ZLih+m{*8 zTTUY4>6&|kI5mY7p{WB%*(ZGnPxSQb%QqN!<=MxDoEw|kZ>pyi1ZKGQ%;`$j&% zen>Qjg~6HNWhX zNi<{5tB8c%o)Uv6&ca1Xo_m-y5PZ8nGtX+^;vStnlq&v0naa_k-%axycqu;u5<;3qs=g^Hc-VA2j0)2> z8z&{x{$klS?YI*kB6C%YXSPq%T$IoLN2fi4+j?>Ann=FRO{-woS$9}Tw@!^4kl!P& z4`$F+JGzxPk|go`qAD2(+9S6=U&ArFb`d9m`ITK#BTX0HV5CZoBd|V zMx{w_)z=#4_Kh7{fC&WPB9ZT0Nq+02WJhG;O=WJU13|Q(mB8X0QeD2q5jp1t!vs&M zO77Ehd5?UuWMU9hA%@O;^~dFScCYyP!D>!Ps5g>`cKSV`;2R?Ip5&F))m4DN;FLp~ zk)aYlg0TQ9+k12)n174FdQ8Ns4Ff+8gX^#~|!>XQzgYO6|A!wd?g_EYN^ZpW&qJ)&`2)g4J#stD1EKaR|stzB_Z) zpwL1M@ZE4he@`D)j$V1WSmYju2;o zGhm7@`gwOem?=b`;Qob(3CVuCBaL@mvH=ER8MY_$*euYeflcz>8cPc+J+_v4xqn%; zQYR>UrlRj@4*#}9QbQO;p^i+%CHx|@h0p32DQUH9+lH62{L9Ko>rTpe+^7cCdlJFu zAM1i1BgrvEJYvKm7T9to_uyrN^g^4F@*Lm=$xo*t6i81?i)xtNNI7dvs0S}uG;D9Z zPD@h|jD5cg;j{=1-!C3WD|=lazck~5Y<6yBNl$;-C|o+RZ1UY9Pi6Q>jXXIV^{I=v z@F9I-eeHY5E}&=Ru?~oNBb&vYSBMgJzeS?XBR@rO$>L${!Odu{@5_fuFP8fqkpPJh zpK%BfAUSnn(;CyCw@){i6oNl}EdkFA-mamka4X z1T8MMz1MNT6BVKwO3VOvcv#^5T{%iAejS#e)uiTrLlb;`xH9Pey||6F4wDOHCQ`57 z#-&l1N)RJl)f_87+AeCfz)3lzGGxZ0BHa|xSKjX9`8u}UIzJM{;?Si=8?1Q$bV-Yy z6<@>~W5oXSWwuUb_WI2v%Ydl6Y_-e zAtG2Em6cHRmdE@fw=OwSp_9UC@}^SJ5{^QsVUgYAW_YDx)OtY$@5=kuS2p%WEZ)q_ zJZQn6Fzn(hb6?CtOsJ>3|yB=F^upvJrdGUH20+Zwz8@A0_PN6Py%2C(XSFh z#n12QLV&1s5qgx{p5OWw-G4yUumTB#F!lrDVLG!+!ccYw>vvu=rhi*@MFC?>AfVv-H zJF&Y(EAlLpmFB0g?Du`yyk@Ocs)@)_j?rG${jp#o*{t zU4D8^18#*aNrgt^Cve4kf+nfX0t$?^=mXBD{E$UK#~1X)K|Tn8CM8@^q^mRP#eJNKzi5#V6%CNo@S}r&PB2SaJ(d|yeG6ZG0>V%33A*30Cq&J zOY2ET_ysq?f5E_oCHDbX-^XZHx1>aiSx2?_xrM$z5_qRIPuNL2^BPUZMLK!$(Qggb z?`EPhg7SN55o`g{y3X%=&qi(i%HNHc3?_z({=jnfqK)q&u6q;lM^QaBlH5|*QoBd% zAg=>B9Oof(`h53UQa>;i6G zRK-Gv1&B?6i;cJ~BIsNbmwz_{A`cQ|7&ZL55@4*V(!((U(#f8;;CE6!uF4%ddeN}~ zkCofYveMMz2{)^x)>{4Sk!8wJ<#qb7$(#4ifJ74Y9g0oArSb5#aSN8{m5FS`DRI!8`a2Q;B*%a zhjl-bqVei_cL)$~$%Zw`OD?I~sE%pHre1lo%{a?8m5IkKRA z!O<~6rXaKiUdD%C4(&BQ-WLTQ!dp2SJuUOwhf4v{^e~pzQ0pL$Ak*!pd39`0D}UWu zE_wPzOBo(ODCHvjVD2Rt-=~ICh9;b>FUFGUUxC;kA@_A#47JtMx?`@prxvb`=i)2N z0h+u*oT#fl>4kdK3%rofiLDt#ELOcTnlyW-UGJ@QTtn3K(z>U%Aj@r=zgjn$-}5+~ zYBU)&mcHA`GIpB=h#nIJ>ODXyWW5m*Vy4~gfJC*}-jzGEkQ`!367=m$ZUG)gqF(Y@ z+BV6j5Xh^QCDs<>m%OQ3`j!9;A_E;cJYeGndXy@87d<Ew;_ zKTHt91t&qKb77lnjq;_$mAwKN@t!^^h{K4vdGLZ}!P4OtM-JM^D%8*wE&1Tih;kA< zTcGZ<_**d-ihDwEo#u3%h*FLZQ%Hyal0@!C`HW}h&uKnBKA^I#s;&mAT%gI9+Gnrw zxQ?zulC3k*DiM^IKGc!1*wfP!5fQPsw+E1EK=V&G=v=f`mX`(p0+|3YX7?wCnwFl9 zZZodoLPV0sppLFF4#nDfI_%Fg$?uBAc6>fo>AudcTTgX-s+oIBI8p^lZRg8w>}`Hq z$enXWI*I#SY2JB@J@k6RXxhb9(w@$~nx)U3u(P~NuVKPvX^Jr%>8|UPu)f;(jcb?J z4v?SHGMPCrBN26eQi4pAlnswy?9crE7EHM z`Gsd&7hIPuwI7F((d3WdL7ua@n0=_O?8mgpVHSzh`vvO{W_V`3%~ zanUBI43!fSMt6@%nztAvyxS{y`y$6--vOyZM8Z)pIqo?{*0$VxJO4a$I8sA+9`1Tz zOvPC&W(4ysZm_GHH>ZORN(eo{0u8I}Sc<`4BU=6+?#y_Klc74iGt&WPcPp7NfJb8N zH^lvwukWegmbSJ=B%T}r9ag#(eiIG!XK)3<8_eqJhfw~D@MpEX79}dkZ=o;C!tEmc zY4bUoCcpd={|}lD-(ya9;=~8jiss^-eZ=ZihBXUE zDRy63{96}vi#&I<@)&4#rlupwtqmLlc$X>h8*DbmnKX0^!hZsq*x1-$RZ1-!trS{K zn1hqA!*|^4l*RO$tmyIeZ~i!lZTWI2H@6vc`xjHqP>Of$_@u*~)3Jeih`-b6XJzNk zM##SnR6V2dH#bOg2O8=Cr?cA;z(jF0vNGSfhiLe`MeIoeK)r~~xFITDL@BTfRv|?< zcXy#TaG-!0O*O-48{2np+wYpXMRi~`4TkzA)ci@QnUQhNHIP6>!VGL+?`cr|c zqWoxsN1q=H7ZYyc;_HuG9+btyANWO_`nQnXTi*$5_-6QivdnwlW6A}DKJ>@45z_iw{|2O_ODL zwb0Wn=6~DMtHYpkHZsXHLDyBlJb)&7L4lmr;*1HhOefxlTma~%16`PfZQ^r2#owa| zj-u>nwgfzY$kwBG1k3;KI*~nprN<>ke~a>eBEiMfqTjn9JD@!SJ*to=DN3|hNu0c5 znRbyG(nKeVrvZX+{+%Bc3Gv13w|@qsLtAbRdETAx+z)<>kO&WRbJr#B_9*wiiSbUH zUpw(63dPbdDM!xUoIxk5szG3MuAenwq zK<)XfiHyAsBW%v!fWOPZ_);Fv4!RI(@|IBMH?9MQ7*VpR=vYa0!GAV=FX7?&mzGlv z@?Ze=i-|=iNIDH=uOb*Got_F1q<}A|MtTubR6S*^uA2tmx)5@r-$|vBr@G?Fy3l7+^IhOVW=>bF z>A@ysQZx)_1|GIl6Z_u$dh@SQuU~%n510J)@x9Q0IrxW}zWnlk`j>yR)Bn0D@M_P+ zUx)d-d-jip`oBK@YqBkFwVJAn==JGb`GMj2n(r)} zFz}xi^8Y;7{~6%*%-<4^<1hWI0se2E^{=6vmreiwv!TFSFAvJ@p0r+3{Wb9Nf6J2j zzm#Q!A?{1!Kg)pd;?OJ}o z_YojNf?X16{~3QSqI!VTD_~^o|Ksbu1L5kn|KU_b7d;4~C2FE~Mu|@JUV_m_FF_DQ z@4Yj68NCKUqIaXWAP7c}-h%f?dG3>YzrWWX!;INyue0`Q`?J?t2T0+%{OXHU3z@AI zZ2?}keX#_m8k{!sL>8?^n;0*K2{q{;W)P2q7^?dPyLI83Q$ zcNt9O;YLJavY8|O&ER+P27U2Nv$c?m(TpnJe{I2MWAvZIBs`wmi-7&sD>nf7d1{v%eExBE;OE~7 z3UDo!(*7@1b>5oV>!HgSo1En0OfRsrfkMLw`x(dLM@18>znmyc)w+c&2=70pigPgFR zXH-9lc=hAn>Oe}J!Dk=8(pjJTXjjcWlc0Px%*%YMx}c1Eqy^)Hj0_A6B(=xyOXRoF zAtfIMimM>fB_t-+&lrH(4$E0Y{nt71^L8y*ro=?vnC`e-X+W z!QsqXB~wVsYO9Hrnv;mWFGbEJ6g@#f)7000*#U38C$DsMn=B_wflRK;6&5d^;)SdI zgqE$@I-AK-T_9fV@Cxri|7TU+#e4#IDt>zKWQBI3KSO8%Abivb*O%vmu^K+yu*zI_bVqKQz1oG)e9=$Ufv>H4n)CMd3w|(?HQLq)yt3vN^7iA<1pjyk zF7prWTxLmZiZ7*c{t`1uB5xqcY_8E|ceZZ#`(m5i`8M!+0pyZ3xx2{8g&lx_aM5endhd1c>gEP?s^%Ka%)K zN?0fOMj=FmLt20u>EeO{4M27yeKAq}j?sKL!#2t##01g%Kq>PRvXzfc`L9TBCZL??2$RcZP%8{DU-XlwZuANcUMi9wFmpO)c`}ke)hd#=+O;Bfixx(5)wOjhga~xKf?K)f&!@Oe}efsi;zhxR)*AZh7WIs z1w~6>!-2<48Ji?ebwih!mhpu1Zdg^2x;kN{T$JGSDU92&3hdxs`_(WP6!G~(T4kz_ z#Al+CC&?ISLRAx?{?6;CsbcjK`o%tfIYYOIcY(fwZ@xnxA$xrP3R;2+$ZKf+0lS2y zuo0QQ$0&Zs7(QxP`#L^Tz2&bT8SE`ALUU=IA86J%HEnH(&>LmT$OMYAU=Vz zLjO6%&Q-~rbZ1UWbXr1W$gyGH(-QfK$9Q^qZ!Ff{HDQ-y{%sCO0UE|k>nm!nJHq=j zky**TXp}vI4zBjpSp&$s-&P1r?7@kDc|?k+dm^@QwWp5ZAb2|Fj3)+%B;|G{{Kx;_PIDEPwe$MnI$=@DhQa z{$n9;LP{V#7HEmnH(hzcjkOkkS4(xs;_Um~`GLycmg3dOjV5>n_TBs2wcX4}xcBUM zn(Y2dVc4VdkZp0=lR`N-?y zmX8Jz0uDX(+M_3xCc)U=4o;^h`{^yw@5~Ac!8_t#p~{>7aRUWRXH<%`f7cxWncLim z(?OTE?PqY%?qd(BGqX$H_uL5EiqS_uMI!c|H#e!H#R}Z3*E!`hXmWTpsHUy=8)Rw* zcaS$Zz1Es7x1cnQa)Q@cs>DOAxXvPPw1%yOpx3`dhUdcIzoW!A053Y+=*c2OM2#1* ziFp8Ozb!qTpu4^Nt3Kk+gZ4$}=z2rYXUuc;UAKY-UR6wYZm=>t18TjjwCN}#!|gF8 zjiF+;2y#gHtd+!cM{$?eU+(eNokeUwklyUiY&M?h$Gk%Gxmp;!2<&mwsKy=*Z_$Y< zpCp$<`lWMw4+FbE`M#o=O+L`D#Ff{ZNW*Qrb(D-9Di`{`$Cx}DRSlxgxQPNC&y z4vN8BwwN!>|6Yc7@2G)-x06(^kMmdYgKvMteT{|BOcdL}0b6%a=lG^Ai{=-3!Z_H0 zJs@O15qBg|zMt=eV>yt?5jgNPk+Pq)VETD?L@|eG(Lg`R`J+)5m?rm#|75N63;r6b z(dlP>f9cn)du}fQ!RyCe0rE{vCI@)N+OXb#g<=VPwTk~8vuJo1`O>Nj9A^F75+$-%qSy`6-ilOx{47HHoLy`qRw-ZuOtxC+NIwU>6g8R zMZ)yUTG>4eoCeK`WZw0Kmh|04MTWd&ASukisIuz22ieYgjD5~$mff8EV5X&VhWht{ z|FdTI0e1&m8=RY)yNPS#m$SI6(WRazJ>evL7xYOMZSW+V#sk z9SYpp<1?ee<9&{zC1l3NROMPPyxrn94jQF^&Gz-`oO6EyrBsX`6ZEDM@bytrr~KtJ zZlipYrQk)LtFRMug+to?kJD54ovny8^#tujB@||Cw>NF!H$oe5>9OCFpzk?dV~N7x z_6;h2t-l4AJ?zroiyS8R5^sD*dB!F325NTar-cnp7iQr$W5VOr#;$h#VS+?!89yb8 zky0__FBbn|cy(vyngY25qTUE+bSY_I`|lOVd>A+g%7AFp6c|Rik_%OT{P-5}#=&kl zD_FI0==d8tr#oDv0!d?)jY&Y=HwpNpN%p=I7XP)El|=GJkXB#HI-R8M@9%3iZZqK4<#d8Bc!25}YswH& zpl{Fsh%TJr?(c}0It1`1#9f)8zwY+WDk4a37Ldm-923Y$5xdznZy14on{R9~?iN zcdT7GH+nmU6|1)DGwU$mk4WAODLc&D&{K>{>|pYu0e1HC9r%>n_3weWd@d%mY**hVta*JwfB1Jtx1L-j9cvWN%=gpXv zmAka#sR?11Cp+sxE!&?9dmq(5D~Js7)iY=j0Jfss2#P$b-{6li6~+C-m~$p1fM+|n z0rj#E{|XHxQM~o+;n%tc(yp#&)R{3WN$WxQSaAtL)f5qBxM4f>dto5W_HqnpL{dgYz;aL{(tG!)nE><;!9^> z8Db*r^15~%c}E_mF`l~6Q^UQBU(d0zxjFuxn0PVq=_BmW01}@R9M88IAF8P|xsG^AWinsO zIm<;q(BM+7zI|85bR!{jdWm8TId1^(AA=~Yhy$=cZLf)TQJ^pR5cidxTq|Gx?nIez zLD>k9L}}{ReNo&FGCj0>cxAj{y_x);uG(r?NOLR(Z@kL(r#J!5j?Cq!82jyxh zwQ@n4D9MF9k{;pm$dFk@uEBVJHM-Je5mCzz-?&I=HLm_;y{H3)ZFmr}tN(`@6F|)6 zeHT;xe3@BTuFqoJ{7z^E*r6YPr1RvNsR5;BqYbae-tF&ezwDp>kZscC&qH-%2uNF& ztrX;6t*qM#->aSyBXv~ZuKE=*9Ln8MRaN!8qjd}CQA2aHAgW-GBfKH-YP_+q7&%yc z4Vq@xob1HGRAp3KT42mXJ2P8RL_aYsZAfs}q$pxI__TIl7#xq!c+QL}kWwPw-)=-6 z=-)ANSmB}&@UQ4h6Xh`7chH#CG-W>HU`*g{AMk_xh4Zi;%+U+J52Qv{Wt+D#h}Jx+ z`|+btQ#*wbX5|9c@ezfmn~!(qE71 zGo}{du&6pxuvs67gonMF{}G$TfUjVZM%$P3Zmnz{BME_Bf2ITfFXA?$YE?6`B_8cl zed%|_b`U@#ZaLmG=U&77XtknMi-%5o^th^tuKZ%?H5FPxRRnj!J5vq%p(ychcoe z6#0M>JHdDG;@hw-9K&^&XaW-`OV*@J?zX1mQ> z%g&PX)hPSAhBSP&##yyeRT;s4Dk_ytn)x#mVpU-KBLdl|BAd#GE`hfb&l1KLr;jU( z*7L^qQ{+uIh!Sduo-4zmDYKbS{Ap_ybTWMM()|?F9gMY?t2vV8NqnZPrd9g$geU1N zkF&U*_>MZQTfvq4W(ZN$&bKHSrE98RJj8`QpUHd4^%9J!6gtgG?+~LmO8W5)K~fk3 zcQW5Vd-?0_F$eqf%>ypy*GL2Va_SwAzhP+q>E%GOL;ec<_xf`W18osNVbn=i|lrvr!h=h zybv?2+)Rc5Ey-+3L6ksS8=?eMBFuF*xZ%90%F=&kJ3!!wVG$_b7vDggr#8SQKW#Ach43WmWGw?EBS3 zQb1Jc@RiBnlhq$wkAm=y_%~=%v=|Ad7LlnPk@*J$fl^JT6yzik(plLGEx96NDt@=^ z2M%4;$$p|??`zMj+0wOka`7rtK)UrC>5A%+tdG=f+H)Dfqwy1m$C>f`HREF^>N=*c zII385hZ`PBCu%!f+YF4=M&K$YVro@fpEKeOTfN?UXB7rA&DEu=oaQv6qSfjP&8%K8 zezKG-evVEaSKJ4Fy^%&WW}j_Fta4a7kk|jl!c@IAh2g+S)!_cW)^!(vJJ#&;q{)75 zq5v!-NEn9)kqLCMD)Qx&t;q1@%u0_#tX4lu7}sU&vKn_pm}}CgBbN}pT)3-e{{F}Z zpSyV1fXA@wDqe&`Hg`8%ORkZwrav!Er&R(wrD?;6%>idtn+;}sUBj3%&WfPC3o+JXkh)CSg}+vYD1i|kQ@1-NEx%U*DDrxjbjVUjC8Tzd2l@@B&a zCzLU_yhg5LDcz)YPumVIUuAVCtqG>L?W0>cJIn{x~4*BK_Y=WlhR=+~iOyDJMM;xtT8*vbV z5&a11lEQ&ecL|Px>LR(g$0gimG~2#XgA;!BBOgql0z}g@W^s2+EmRNShs-66;`NP{ zyo5E1zCqC`tqULq?0(wV#{;TMErOgwEcoBvfMkZ>u2+d4FIJ z9|VwbfeosP$9FndE{rO0InPKY<~coYPlrlzbz0HLD>m2;s!UT$@}^@E=t=);NghxD zDBsw#7ruW`J_@8efS<~dLfMdy^JGaV#!_ZyH3*$eTV z1f|<69166kHkPvn6?MyKT^=vDgkWT^ryaduE)-gR-rajz$7y+4gge${E<5MnaokR1 z)Zz@*a{n6JHT>B}{ExZ=;jSJn039ugB{2WlKuF?w=kS=7p!q(u4 z%C)QIGLKbxH{U<}-rOtrPyZ`7zyFmgpn#a%`8bazbOe-9 zs9m%g6-aKicSMw^lpVQlhVd|14~6IW&$`{Zvj>-S>}12eRn`& znJ+Py?msJcqh@=6mwJ(k82QJh2R*@V_PtWRoEO|o6QH}wKW_>WLN|H$FYyMjaamwg z5HF3%^FJTA3sV>)dqB?$@&mS)8G`)7*KO0S|H#9QPDj2009qn>$Mrwkb#E~olxYw^ z7*(BhI{RukfXkBb7sggO7X!4mlRsb+{+m!tV7yq`LpGv69~)9&SNb0J+!iphE%&_| zR*sS8bvOj>waf0g4EZ0rey)e`63}1Eh^(Zf#rHV+~xo|=*w}xSXtr@H>Sz@ z?}MCQpf0u~Kd`+2B?axP(8+T@k&FAFlyr4o#Pu20^>Up;qT8g=rkCtENA(UV3O2jDdIgb#UGjZ$ti5)|3j39K<)t| z7f2u$k5kS8!IanC00csSq0AUpJ+%=i%~_YMrP$3<*gXk#MU?wW4}G&JgIw5X zJt%`-7(DcslI|o{)Bs`KYb{PK=7(wcoKgfrg>k4bT%_hAXJ`@*%4G(D+Q@YvKiuOy zmB%BmamZcR_WV%PX&eS~Zx9?E4Y_p(h2q_W3Ws-62@1lQ-9Lb>9PPr+ml14pvzD>H=G_<-=Wgtz~7b&d2}#ExbD?J7vW z=ZmK(-$LgVL={+}MEr<*B+T^*ovXcem#iBlTQ|+p zjZCvjZ)v3R2O5gM?`zC8Rrtx4UoVGR@6g>I+|_mV{>`nXhZ?p>m)#4V%E)DLqgb9B z*FWYKF6RodKo@Y$mgOfuaQy_O)ymetUzZvajYRy|=5qHSlwJAPEeRWF0t{<<^iY}jH^Vf1KKZaA%Di?B!8@sg{MTM` zt|&7t8dL)zRfIYp#JIzPw3|Yx+$&ZEXpj zdwn-InBpS3S?p{)dc&9-a`|u1o#5O$68(=j8Pxv|cZBJP5AAIhr$~Mi^GlGQ6aCMP z0c-iZu1E#%AK3&h`;tN!X%0sDA`bLx4sRNiNKnLA+IZUE`tVCB4DNM96Q0AtgumGU zX8^AL`Adxk^D=yehZN=4u!8?t8jwu?H1S~uV&_ExSck}R#!xmrV_W< zCrw@K2aB6Mp5o?FzQqvvBW&g#m3VzP8uIog2K*x|T_{E)AoHabb`#$vWJM%7x>r^TSQx_t0*+niy851`U~cSXH{^{V zS6g+W&4pSYVbeu}WQ;uWqZhdS(V8#k^tg|rIYQK^WpY!okqI|DiP@C8F!JTrGj!M< zLxaf~Mp+U3cJTtWr%sAa2Vv<#Pex~Y?16PNkpCYs21I0#q$?Mq#;brZb&f95?w?EU#vJ>LV zH#{Hycx4cewDx>hZ4d8M|qYOVXFO3K@3TP|rmEI`k#p1SY zie`Ra!L#fl&g^;pgqd$5*4mSs`E^!3q8yTFHdUUNyRCEz-+2Do!sPiGTiU8oyV5;u z?pi=59wIet-T5ulZZvQhx>o1x>MjJ#ZgyRu7IqgbY5q`y3nv|uvrXkXPOy=>&A#R7 zwTxaJU!BHwH$;_7;^oKH>2H0jWxfLmvxP;@1+x{quX0)U>}t0U_T_!s+O`jN7P;$u zU~z@=@qBNXwI_25l-Foy_gOJCY0vyxRg$u0URvR7)NhGO@#gfW_4pH768%V-L7m*0 z@Gr@Sc^!FTtanbdlNsnYTPl&!EN1qhF+nJ@0k5>PH$5d3fpDFO6^{Es5GIJ~7D0gbm2v*T# zKHqNGa{k(oh>Pxu5e{M0iY?qIHJs#d$WfmSg18=pl4>nDc_c~Aj?33^&E<-M9(Xz{ zHQM)Q9d0>DNUN%*QRGRarO0kIdbDy#yW~`-_vDJQL^r(`B-ykH9=ViDUgu;V-5y#o zaxUM0NNuWIkg^{{_0f)XBcG-|!sIDY)WaUzig5gMK<5VZb zRSdP}4KKY@Wb>YFM!%B2)I4Nks&r#%-7`%yq1JS@sP)+6RcS%+YJjB;Y6snoU{?H( z>I;*zA+RB*54hUpx+1NAtaoO4svgXl(%^>}3K}AfoF!mcM(>q;v7vPs`O(pgG2K+i z!}Q`M+j(Bi)ECG%Sji;hKv+$QOXw7&VdwU_3 z8-rKF<3eIF(Sc{@jap|Bd5(q7Q;nn&bNBSGzuC3s^b^Ilr*f%j6Poc!O(iI#wK9(w z8WEqVw5F>R7xL7m?|s*NDiO7#MQ}!4uw>v@{Lu<17~B|A$`eE#hYdWhxewTW!7y*aaN<4gaD@gkDd#{d;c9^+^-t)~*LD3vrN1xMMu#+!8-1Z9LdSElePAJ7x`|gyRGc& z#N=&opiULWT)0lOVZaBA?u{xEzCfqhjTeykwHcuMJEKok!)G|Ps|JXgv$8mtMY%Q(;YtkZs<~x>Q9j5o7)jh`rIa}$apzt z13hfBMxSUl+Gf--uul}bFKJZFdyS*;w3toWB{`rkDw-t~-@r~|dpx_rOHC!yRjnqy zxw6pVi^+PgYfFM^}ZiC zvAU<^w$4?RRA(7z5Km0C-5C_>v>Z2%)hB@S?84?QL_hcS^g6Ogl?DF}DgZU{=!c5t zEt9)B4Q(_G*9=ZlS4HN#j$TU@86v~1y$3b>FSF2d=2*#k6T#M^HQC1Da<|`(FmYu> z>*T0LD!BGkEflWuNNW0w$wkC7a1C=f*083#lBoJ!CN5~^zUz?hbE`>HCZKV!l5?as zMpX$BIjd+A^csFtnJi>1^@d3%xJjnVHY|*0)@cBSADftz6u?nwxYyDU%)ymkY0azp zpe0?AufKyonWIN5r`9q(G%eG$i8%haBWDih5TozSkpu*mzny0iE*4PPqtnzqnYrig znqwTk&FLBuy_w%Uzv1PmsK%*lRT;CbIP=gmBcE_Jv7ut7*J||3nN#6`+-B#-x<+yf zW1?jZ-;;*uGmr{CrUV;-T2sh}k4Ld3aV_)G6^oOlNBf!^8(zV=$aPL+0PAT&8o$w^ zxKfs!=+$R!cdmUqQh(f4QV@}S{!C}wnWx!0tpf6wRDFq7kPv-?)gcQwFGDWcPc%O z_M>58EgjXjY<;@0X~hF>o-w)nQl%u++nN$9caS8&uSZ_i@R{dTSCl%r#H#fC31ZQT_8zsCb8zJz(b4-LsK&i^J8(3=Rs*Da+eHz#-1kA`m+U_zV+`D^$ilM zSa~cqx?##?a^f2kg&)k?eM{YZtTIkv4X3aG55^f5NsB}st+sQXJoefr^BnFrJ3pMZ zQ(k*+Ro`B)W?Bn`#Et3bJ~&Dq9D~HfgGiG-CV37#+IF8y`8Az24xl%G6&z4K` z2R118AQc6u6B<}VXUUam&-ZUcC*ACONkyR{=)A@?oNt>~TC6b-`qZ!EA@XK(S^l46 zeSZh(G6V=CB(ijg__fz^DwYx#oMtk5e$RY|%0=F^`J)embBfq3i31z*)sCv`J!I9K z3#CzXe&~H!ZrCx3#`(}NE+i#zB2ZK)dz@&irG~?v__<0oS{y7eM;iAL<@3bLeaSNR zQGc@OasjDzmdd#}6GST-ICS_WvR(0B$W+e6;vP*N7$ewSd4zLr4 z2DCwnZ-un+nzD?H2ai@}Q$JS4V06|!4zLer(JoD@S;gKjN#Gv_~p}{P3YB2>g=bpx%$N!CH&h) zqjvo;yrC~!F7I6_N1bOr>ZE}-N>(c6rq@QZ95J>ZdORIQ!BG&`j_OnFdGxSvM_;W{6eqI(;FQ7&yeDsMvHZ4a9;rI`UHWx*TefMNYel z*ko2$o_;=iLg0kx^VeRJ`bhDOvFh-N)1bfBnEVt~4M$M^=!CUKJwmavy{`L^(5bh* z1@jqS^gOj3^$|l3SFQ87_{$8<%$LmfT->|kmMlyxXpvhAbwc)+8Q6fP+_lbr9i=g< zN@RHsF>@bb2+Y*o*4+gU^~Ub_sR%jobvE52UflcuAy+#;)F?}h8JKAUZOVv>;<{b6 z2j8Yj>6tn5ftysm(m=-gyWZZSGc{ReYe?^~0Ouu70eueb!1;M^A;F8A6=jq(SR_8Y z*li)dg8&xOH2vbj>nx-BRN<x)fPrMdeIOGVo&QDR|$p-_Liiz7Jg6kj2{f#iQ$@ z;iD^S5gC`|vyNT)L7bx6xYc|m?Pn9Bx4ex|7@zxMVu5DqpeM)2&8Md^Z3AfxmRB8J z8DC~+t6tpDIg|}YdvNFJy< z9P(hsVSfhxHjy5_&<48O#g8v639rOpJoRkT-R|oaBGnd7<5F`LqG}>QkTZkE$mv^) z1tNd^cxQLl>!9Td%GybG-fwd?Nj{aIx!ss4bo$ko1}o(sYecI24!z;BX(^~={mTAr zjzVHMrEmP#q3Z{4_nOL(a8~6ocapM5Phv#QTp8tC|BJ)!#8v?K$ zF7vKy16&JM-L?VE2;h&mYiTZ+n3&yA1!``C{9k6{Cw~LDa#bGu1~-1j{Vy5Hr_j%V z8o`T;i`|b0gX1vufXD1yW7iwwu$%W+SDtTZ4qr&L{^rN6JAHT*zK^#{m@xi@BLeAf zsEj~dbWO2%b#(-Gamc=jg{53D8*THOn zdgRNeMQ?0dC-n^U1+WeWpxW4^^U{zB(+=7w;C!@FTbP;=hz%O(t2`exHY(ROyZFdM z`nCpVO3>!K;v!fV3}AbX8{48uiSxK7TlNqOXQfS@d47B{0^OiqhZ0Y^@yYnx87Yl1 z4k0ZfY7FB=gEMuOXwhh^FH+bfz~6KZ@{8Xtj3vBrdZ_?QIee)dU4K<~mRxa{i{Kdq zYb}{~*MuJ$Mo2#X^2BIxvhYhtHk#_bpNYl-@@YU z35GixbDW}U`F*@>Jdr~hT6uMx!|;WhmW4qbpCNJh^zd5+BMjLgXDt#`$NiADkW1_O;;Gl>LXp{ZJ{Uit?VeD3FqMKDq0>ZI6+S}^ zqb0`?hI-vW8@e$qYTtMefZzHqXg1$r*U$JzU^Vgp@D}+b$N9t5=rELcvlGXis6QYG zli%bSYv@{=*z$x3L}d24-J61{(9W=nx>q$>UciGE!=#^%dy68Y;D)JU2{6gBm(DNv zkxdFE1_YS|+lsZeLx<$XgIAr0YT5BfXdl&K>GA^K(Q7H6+u5k&k`W`7wM~YX6p$mvzJ?# zegO}vN~0Fl6AK?@U?XY(l;X<}C}j|5kHLdR(XtOacv0 z)*Y>}y!Z&yd&}S#OS+kQ>%B|5m5slIzJM3^ImX2ebj`#<9Tg^~R}t_q^kscsk<=V> z{||?lAa~36e3d=Di!S&UEwvFn7R~xe9#UA20-t4Vtfwc7?g{4#h!RCv#kKTj7Q{iS zVJREvJ-0`+{g8N>&HeaZHp4C^@R{sqWv^-7tGoKfO55Wl3u0Q zZD5KtMNy4Zx@vRj3m#WX<{XRldM5G<(`3{mZDR)Rpf3+GDF8hhWvg{r-jn* z>Kr_dpDoQ4_{n5xE~oSJ2lQ4X*ZXP=v4pPr-88}dwd?bvoQX$H6&B`;ni-5TF-=8y zii3(Yu%4{|Kbt~czZe%@9s;MYOUWX}f5K|gJ38{05@*I;>R5JncDh3( zijEB#aIx&Bka1Bc;Oe(o%~%olG1s4={_>O{ltTeudEDE?(ie6H9ZwGE7cpF??T8#3 z@$%eO5=Ymga%LwY><`49L)BHGTQXRa+psXOBr)=j7lgJr!g{fxBVgIbT9mjP*(Yxu zTB6FloHrrK%2nN^>oc2^Q4y~vM+jOF&xtEc2M#ek!O!S;oCR;2hcZ>p)Sa0Li}-D~ zxlux-PF4^)C2wD@*2RfNKF%%@-*NqvtovaZL9*jRk^wn`c&H`r6V!)tRtG#IIzQ~1 ze9przXQ4T79E|bIzvQEkPfv2GuBS^+vOVHb%{<ynnMD|VQ0tRuA#BP_Pp@s` z>;p?Io==;gwaDA&?z5c%&iWEx!wu=uCBdfs^E!-BsFdof&5pk~7xT58j^kA>i3FGD z)j&dPe9s7$?#G9md<}aC2jn3no(QAs%kd9eysad8L&dji zt=}^)`aE#$x9&VudD z`dLY2roDWtr*v!W+9Y1|XMDBR@aoNSi|H(NAEDJGh<8i2jBWmk@Wkh0Oomqy%H75Y ziNS;iCLPUxG~6ienMl3njL!!6uQWq_mVrmFl}D2}-=&iQX5YwJd6qi6oBqfK_2Q~w2BerbZ|dlx8cfRj)`zsN>f@ey=-2rbFEa5-dC+Bksk-E7Eeo+ zD0v<)P@GaUu=tg_Ig6;pNI(eg>g=Z-b>$G-rJ!gTSi&u9P3~$ysn#(Y&!ci+GQ?1gKK`wWXy~=Y7)KgYS zSpsvozh)09Y98}z$`XN?cHmNTezsvSjp;gJ8#wt`o7Nm6sxDkHwmRI9bs!(&ntU;& z6bn>?%m8J24JZ`lI^HWL@MuQz4qKk~Mtq!d*H6PT*#ora)20{Y2g6Z=Ww}%Q zV0i~f6}wcMWuMf1>uUyCB!Pld@7`bgok+ApUSH>+2 z@^zKW^rgGegc+#oX&+3BM_PKqDzZtQHe~(yG!*uuDq7VAMEj89i}h27Ey_Ue1YNv?`zO;aA=%<&TLcbQ3-3RE_Ma>W8R4|Oq|n~Pr44376L+851jFLksfGI zT_s5vcvjHU?Y{AhJKq(__uN)#S+$EVXeyXdi`8HpQ1C97=ubijA$Ja?$)f;~Ex$F;Vh8*14{=^NhV z`|Q`&sgn}Ei9U1n+KLpn;d%FpA?ssh;HV9u7zQ_fyV(_E4ZeOMm_jS+*fK^F#2Sgl zW13kTe?ki@r#A%$XrJ7>{u$vL8s~PY|Vtfx7qv73h)?;CrP4G19SCBrAhixIp2$&JOdoOxB@(lETi>i zNmwQuqTOaxK%B(_45s`FqABm6)~6S=>8AN^W^iPtKFJ!05Z7@49!1kDsd%+!H28#p zkKiUYY3Nd8knECSUNvEx>naM-d@EOU(xw9(dq#fRXG0uLo1Q$k?{I)`lsu9f0>Q@L z5Iv3e?=W^uDrkn(eEsJ^rWs9IQXFp37XBLML9#IPp$}{3Jtp) zu8jpWwM=jZ=4|Nj+T7QYBef6fZ5H67ps7`+!tmwM2OXk0yAZ z^s@{9+_a%AmCR+A3h?Cjk#7Z;3;Cu2QpZbjIs1Z9QrA&!A9Xiu*FxmvkG<~Mk z;;&Di{@s4O<}P1a3c9-;)B0hY z&j%evh({A5-PtZw!`dYQc|dtm#g&H0m7kQ?)@~pFj8XJgC^3SXdjStLS zWv`@oMAqA{>vN+bV55t;Ni=1ymvArp$<^Hf@nY6;ZwuY6sd9?>>Wk?VYdPry*Rt+~ z-koygYfGnppQt7|$wHTcL{^-Li&CSz@vdb=H6{DrEvOE{;)+@t2&5_@%nPwtK*`aRzj%hvjXJVWTWz1%Zx+#HchtC!{|)KrJ4S#>LsjJoLo+4F*HtaWBa)9Ls;ezU_y zeC7$JXU$U{^YinydpMEXNl8=xv^TeBO!Jo4Vi@>n`tyAWDy_bwYcaIdNnP4WX|R8= zo&Bv7*>M;d2Ga6I-DRo&<_>~mHzYVg|M-WMu*-D(M%7Qtx-Bx6q)G%KTpxb9q@AGX zfasG$MrSb*)5&^|`4TjFb%*aAPgj5QK=bpd6K9ahSZ8uq3gph%o9)aPoT38gU{o&`{QS^kSFOG!uaU{+2tB@OxSnl> zDY!;Tjx4ng<+BeK-%k00-R=Rv86FczxZBmUqqI~vQl2o=%*eZH+=0l_96L8QGN{?; z_*IBBHY0|1zKzy0F#hgP+&IS#wDZmNdXb^&iFt1~{eebxxDni`^C^e3Vz}?I6X!32 zAS&Ti)p+yIC-TAKL|nGXT?an1D*zyUh96wWCf+pdd(Oq1d55*8_+&>_kN$uknfRAC z^&;1-K3c-2W~u>B*1XLaIpRfHD2iHC%9H*s03B|Xv-p@$b z7Y6}mIrYuiulNmwtO>xGVC!rQx`!e9Wf?5-?C@hU=YqvI(Hr3{f1<)4zkwl4pQ&$7 z*5E2g{=QGR34n7R^*Jog3G;*?JF$NyOeZ&8mV{rzPSEShWq^#XFET~^4PXs93jkIS z>Yzcby-_e6u%8Ej^#TLDx~H@*u?P9b9}7>rMTi6NlS@A?ss`3P9Ag!&Yc1!Ty;)Xs ztF=?!xqa2&Kjun@t%hwaylQCrbmM|-_LFS7%d!LR4l21_*lfqlMx@VzLPtzP4M=wE z-B>kgP+Fm&T6XVdSCzNQdpS4RK1n$?QIQ9J2-(5Dz@qso5 zt~QUMuRBt2w|`qhV>8}w9Da&nj(x>!Rd{J_6pof@X5VNdJih=L|8qJ2@BhRo2}5bmN$ZD%;|huluTV z-&0F`sBtI%OG#Dh*~iKX z#&9dBsv7&M;Q29A8`*yQmRHV^>1i-=^TFzD+b^SuiP6ln8*0=o25WJ0)&6{GFKQwP+y+O|uGjRY9g}TM zPP>LS=i1h>pnRohDb>^}QAtdH&E@J%Z_W@A-hoOxhVzoeH}w|YJ!8mAe4NQMCX$(T zqWD=4$l4VD#EFG!CwvwM1zk?QRE#!bm3b)}mhAIp;o|PsJV7nSPfsN?`<9A{IZiD0 z68X`}wGCuC*I2R&QG!ckE31uq1uiNSte9wbGj6Nd>7MhE)r(Jvo9c6)jiMym?D42h zol`Np7oGXoGVu8zzvCe1cO8TNJ90CG?Q&ytEij$4+CFDX1iQr`B(XUkK^~`AGOZUo z*Nn>;WD`q_`R0nLhpyYOW_`u_^{*7RwcATIMsV8Z8)kUeu=3;FStO6Q^Tk4P|81$d z&p(8yUAOyAe}k*`M*XfLm{`19@>G>t;{so#U5?6hMK{49TWGN4*J*Y-&M_(v&C$V& z4?d?0RdoE8s?xew1Q~r7U(s2^7g>2l$KeYLrewa~xdcws$2L{fTn?FhZDpz_`xI|( ziA6q~Bv9aH=u7DsaLtp;VJ^U2P_i+AdOr1Go|IA6kK_^h8K!u(ZXg(o=UqJl81HAB zvP@k|RIBXzv~;uHQL=1u=SwZs7h~ZkE*7V|HBnbBC#g~_9iCm@VO3J*-Mm7~tf8%j zUuTK<_%n}Jx>MD!vu&(Dwo)QaO@f+=&${(@ft->%-_+`Ds(SzSiQM8E`inzZG|PNi ziEqY7hF9wp%D!vd^5|4+U9z5fot^NlGwV?(wCIK4ryhlzXy%= zi87n5Zq}l8Xj3=2348nMdc@`DqO7tCW9s2O_x0;N)G&h7NHvyC#dGE&&R5o%D8{EA z7TLkQJ?UfGcMfnTK0O zhqjnAifyC$>)o4ZHGdPAW;s<=#l*Qx^^2rq74EHbV6U{i;FXAwkjHY}rsrDRSS@-k zXK!goe?wFyG0PYGuX^wVhHAGRbziP)Xpq>x8HnA{TE|;1y?S6lj-N-~_8z@!s-he9 z^3|`NcTU~EVOq@{AtBKIuZmVy(JsVI9AqymBQTG8O-Sw7MAJgAQ5Sz(L2yLHaIq3y zd`q!OKl{A)eO|uN#jhyBwqv7+Pn|Nbnv3=NO`ZfO!)rz}3(ca|)0~i$P$sRmW;Dv5<4*Fi&hvUA(($K$~D^r12JxU?-*2tfC*^!?6Umxq($2xORFQ7pX)bg(4gK_y->GD-P(# zHFjwt2HL*!)U4s>NRl7VXsiac6M^!lFU%wm*eQ7hE+!uw8gk!WtbnfP=wpx>qL|Mq z`lyUO^jIQl!rj#0ZM%FmMznr2X?GsF?IQ(S1yyB{8Zb0s$QD*tQPC7|7cXA;k<-3i zM(pP>-7`&Us$y86JG1hpWcVVzg9pjarVlo+7GyyhhAXlwZ{Y(uIcHAKT@tmJ9uh?( z2E-Xf!46Kk{JJ{cD{Cp}mWb3T0R!bX-c&h5@64n9-fmSE;|dxSckMt)nha z5-Lq*`qE9RH9nuqls?DQ5?S z9_01n=N&Ny_xRrucCXd)LdQNu+po8nYllh}XQKqqx<{CeM51*wrgNE}eeG4x&3BpG z`$oItP%M2SC*SJvgE`UyKk5F##-cE;_5vOI(3#O{de@1grR>bHJ229R;+R2JUS4|@+8u+Xo3HVz(Pe<*-r<|{_sENyLr{E{^U zYm(RZEn5S2rSkCFxLVdvTD@@%eQ(IsMDz`!&Pc1qOBtb5M7>rMVLcaHFzeUtX}lL+ z%E9mc`fly#&kwFjCz#gXkiWwz$@I=B1`|xM-k#ec?{TtyX83fwCvvGJ+@6`+%v?c0 zhr{`?Qc-zH*9s%yx2L^7WWrv5qVlP|U=fm=OZk)C|3p}&3so*CQm+9{JEb2d@~s!GiU7ukR<9 z1l=2}eeM8-?hTe%f*tJV>j(|#MoALp7lSCO=>~NF?}1Lwjk%lxy(;@j&%cfTDlh2i4O{YGE>GxUAE7X8!2Z;0+7gcGR&X_nMVDrH%X zqtJ2+1x8ntJ6g>mGUz#JvI=L+hV^Y9|GY(l=M9LP19kp4ezISp)Rt8Vbb!}%cbha; z)@a7ECI8;bkJIAoWKlze+YFZTaOitSL$VC7c~XZJ81@EC{<1dDEz-NY>02HAw3>`Q z+nwYJtEmw~0AyDc{X{uXOWs8TVV%0CO1U;Q#u>qz6{AAQG;6parzHHzCeK|~c@N1a zW-{5osMf~D4Ka1T!ZoS7!0vnxmIzzO3?2Dk=o!$&IFc0_CD6nYCnDu2Yb_}kpo%v# zQWPNAb)tyh%_h3HsjuVhVvB%;^J|HVdG!7bsg`k3xq=UhpSazByy)s1fs}wRWpt4U zYgA^z=1aL30@bh*=5rRCB6zTLwzkV)QEcl`Q}YF|`jV2hLCXS+a=qU5j;Op9%YwRc z@CXflLQTbi0?nYB{`uoPwlDRXf4qFKzjg$A1~14RYU)f5I1x5YxUMYBw!V5%ajLgE&0c4L z1}CMn!Yme7TA2nzmkM{gfjp7Lu=0zC4Y)adnm4{#Y_3@pi}CSt zSM7%N+`OR)$JbAK6rUB{+1DkLF77ZzGnv_u&dy;$_S_3?A9AWja_4$vcGtaxApUX7 z2+Gs^)?qnCq9N_0JM`v*HuE4L&o7i_SLx3X8IJ@-Z^28) zJ~VEASgbDh463Kp8o&@s-^tC)8=LAMW7$L9FL6Pj$n3fV#Ru^G9VSO6hboi z6%GuRz}>r*b`xJg_RFZ}_TpZICkBeym0{V2VgC!NXODnifBc}S#fv@WwsQ6q;r=Nw zO*OCMCh#Y$*1jRD#!14ChRejMGHve@Z6cM5pj&*p18nCyulqfzrD$sTC}<=wuBD1; zGwlD;V}E9kF|%l z?cv0Sos}wfi|r=^k-72JK@PT>8V0xbzQ~cdDrMO}cz&*bsUk*XOJ}5}2O+)Q$y34R z!ao%M^Pyxvoq2?^{1D_`6#o}06y$xhL&n(LAj;L0Vhv9?rN|fQ{ zfSug$BVy`$Hh6X117}33-$@TmCugkONh!phX#{vJ$gLulfUbPP2dh&3d~M3hV{v(T znQ+Y#3LU#Mj;*V1GlKpI&6_Jsa6V9GoUUFsjNz;Ou>lETw#-at$Sqw(A6%syLVoh$ zxbt+yD>uLtJPaxp;`iQBBKxss^cVSS6Ci?G-9FQm&{D;i{tlpCW`iZ z5b;||DTmx7y36rVVyb~a&q`-i%?_ijs~*dh{984TM3&S}-Uw1*(nfISQ58;dTn+WD z{4pv;r~I7y)vf1tF;}zgi|^3SMwGI=G5oA;7V6yo%&cdg%w!<@i7tXvOV+Qvl~-vb z<$b-U(&#{&$8il<)T-az`ap@tWZTZ@+Zii0vCHmuufy^~kHl0MGm9M+}mF_!-{_03V_XDX=YME5T-9xwVxZm zVOC;4EUQ;k%-BHTCRr8Dj}6w8Pl4Ty#g9EwWz@BMyW17Md&XnCRusHjA$$j-AZAc@ z8ZScJZ|Acgj4N@|TRMv4mC+Z%=!TV{TO`iOi3OArw^TMzi$;_FwbEaA>aQ&+sM#lN zF{}hsLggQBNK2RUq{@z`3t_^m|CSw}Y^+s$i3aSy&;aSHXm^f|=; z3RpfouJgY#vp5^CKka_ez8K9#vTPd>nLRD1Mi8=muWWMI=u!#QfRlJs1i!5PI4#92 zgEY_7nDt_0=EmIS$up|wJ`kBvvCWQTN$^9%<6qMGv3W)>J{xMOG%@W=9oiY;nD4#s z6x1J%W^$=|SX^5?ZW6et6d@&4=OI7;uuE3LHn$*_l_^lwSzrqt2lMV9EL$Ju)i$|c zZkp4X3?Wz?s^T3uW9MOCjS|TUO0Pc0%ailVT62J{xV;UoIy6bCS}3g+wp8()pTSA= zqE$eNt`Tos@5eimS%$x4Iyt_NciN?^G6{akMroDJi)33Ww1h@j6*Q}nJKmjl;(JuX z5|>WetEe~Hrug9zV(O&PYOG8Z*#iFEK#X?I+@HJ9aOw# z)NE@_p;4lbuxGXU1oHS06Mg<+E>CJnUICB4lypYGJD(zZLnt&q=g!(e(xlk_q2D~) zEAtxRQX9jxUgJgcXoRU&*PVixG`Zdc*^fJcUayK$y9G(lo`DF^^qlrmy8=#9xt(gz`0Gsa z$t&PE^2Y?*w&Wor7VahZl~M6#ZgnFk4Hw1AX`iF)_6CEOVH z(-%2;09NdEAu;O?ZXj)J;I&dg^|`|`3Hz-jNNKzi-M3nN56Axqymn)(P8kRM9t`Aa zESQxTey1u0ZVXf4HLAhuEbEegCXU_!*~^{69>x;5@n6jZuf26Chytg&;}$w9mD=Y3 zE)DWT1+b{3>vI)FE4}=Ir_W2QNA6S*89#LktB^n0X2E6W>HeHI!CVo%w+`w<^BN7d z)M!&kOC=O}$FwUZ4Ay!uUZx03FyEg4y}G!Te&af%{S5ECIYKEf<4O(pz)Hr>8(uiF z-_W_Xid{zVa`*a3UwVD8);ZWW55B0SISv==3YNZtNGl;)r()~hpGt+7`1CeS7QNbi zi&fc4s!te8ly?SvvCwhnJ>3oHBIbR>>}@Lf+sLX2K4);Fev*sInu|C}gK!rik*mn5JOENfrBelV%C=^=BzN$yyAA3v5 zp(oe*ZJi3AH_;QuFvpK1Xtijw(I*d&HGmY(I^DtII)^^dEpWK|!{-6)k#Nx%AL)^M zH2`f)`&|CygWWpXXVF;$R!0=lz8wEJajVfndiu8PL|7xCAiD*-=-r(HiXkh_aCo6o zfTVQIXS=hP-`#p;-Ed!Xq`gSmaW&)8``ss>t&DyyEO}CpWH*9+AsSAS|KeLXj9~EX z;|2{6tL!#t82=^GXxK>o!d@tP$651M1t%7Ttm%ceop*WG+aHKjjGJ$&VGP6M zPxDsFu(gk-Edqvn0#kliU1dA5@th2vS|Ab}|GCO1Me7T>GCqZ3G$t`lE`H;yQB!Vh z5wG3I=RWv#R`LdX>RW=!el$?~!X?IU zJMGe=UafQ0{Ke->RJh0UjI<>2bJ!Y%MOg74*F}C3{yy9Jl1Cw%yQt1iqfB=*$%qBv zCyyXWSsLXMoxQQX_zhi7*$t0rH{ojH`68dG@IfGAL5!^{$RU={fzdqI#w7Q>xvJe` zl$1@L)eLvOVB@S_7dmb>Z89JG}#;{@d2pcn~rXUr1p~A;wt)N(bDkjRE z)Y7*iP`F;TRy1c{Ml$*Su^|{=)_jabBNLrkWKb>{S;k^6lPa zyqoPFL9JRlFA(|XSlnBLrUa)8Ny{?_z8q^Y?tbFpbcKB?Zlt|lP3djy?F{Kbim*PC zGxu^+wYs~deW^}~7TCDrK`B|A4Z7msjc`w-V7+yI4Gww(SH%+Pf*6>ibE!!!c3`g7fAo7Rn|K z2!rz2xVkOAA45qL*Tm-xMg_-VLJP=*)ahO1I^tTF^4RY-4;4bFc-U;LcV=h$2jVjC zDh8(%q$9+uT4vp{2z%y4liX{H0KML)zlZ9C?!NR8?j$=jT%4N6-9^{dlJ<7M&&z6f zY+7wu!R*c72B2-lja$*F@6LL3WjpXyyg66?dCm8R_4iNmMfC+Q6mPZ&P)>^syd83? zd=!4GrdvsavZ3`Rb?-OdbRG@GCvR`bvUpssjT^b6-F+H)JR|eF6}P`kZ0y5v34LRDFQsp(v8z~7eINebx1DDh{7b%BKWdvdVAbiFx+-s^3eNzU+1`C&^FRf6 zweFv!Z0V{{vm)m>wWr#vWfbzOBJ?axOHn*RB=M)3xHR~~Yt9d;$)!rB4P|?OXt!p{ zu9N(tPC4U$y&@q^Y=J&~B`ZTZRI;&;%`rnq80Vw-+B*_o6bBLr@$YO4~G|MpSSKwzU=J2w}1Pg3U zJdK?1oi#6!D-h~)D)?~1sl*Xwo;Oz>Jl8(|NSpCI7WW=M$72d#uHRm=g>Da3jCpRe z)gRbg@SE59TFk}}46|qpHc>`IjNzg5uQEbQ+-1m!e`#eC>5Y`%5aHC`mJ>HE1LY0y z2YOse6skPSyB7@A8wNz?O4Cea2XysN9t6u2HiI9y%*tY0ERCd!`h`A!Q+^w3QI?qZ zIo*mPA>!LjwJ=TL3Z?qu+~kz!7{BScX7!4y4w=;t#THpX^+_|xCf1JI?LsOjUwn;q z+N7y0w9sJw%-QV3qGxI~q+#n@Y^L~sqRB=p056! zj^l`xpYlr>muc&uhg@L5fEabJ3~8Sd?>(i5al(B0Duu25A3Oy#Y!Y0)w?yn80nB|X z=73iRgTba@qZ9v8MY%6vDFZ`eW6LUdY$@~pVlp-lti_V?*P1B>dxC-rW2}eI35>7i z49v)4^o`*bGzkkgNix-=*F*+N9Ur@fq&pSUl27Nn{)Et<%ItrbK_snbXvy*}v`+9@ zqX9#ArFF-h?D$N^_uuZP(r=JA0OD)a7mMaTFSAxvwaWj#`oZ7-7Plk&6!pc3ORK_u zMpcaZWvwI$j-u4@#`DqZs{AHd`rKI~;Y8V@a#{}QjU{nLb>9;svL(AbIOY`2@xQjX zuF|NfVE39rn`Y|wZ?$zw8vuyq*#vd@cw9kj&SpF_Y+ty?-;0PMK@cufSLcvir!@~G zVo|fkqzc!pwTD@-)~o1Pt97Fo_L3(s66}Bm>5crjFOM?qIUQab90QQ z71O*agkHBfaT$Tnr(3eoEeD|~o>@z)x>DwD^O#0ZrWPS?H3-)`N%1|F&lJ1;&v_H8 za$a!YoJ27L#}km2t#{U7GmGDfqcyu-7{D{xNn18E;=lG7C)Zs|7=6 ziUrGPqV}9_;)HUe)2JY21FM2}SFElwTlWQA+x@JIe>r_d(<*Uc>pI7jd%eC|Hfxu3 zMb;a4Ut#r5>)-;N+~jk;c@8C$uWKNalDD*bp~1p~d{=m)9Q`!~TVqA&*aRLZDX=H~3Pnx*HmlD0P)*P=oa#>~hoaEFyoOJ+ zp+=#V${yEqhqE9ro@=g!x;1yl>7FEn*;Kj+jZPK_;%A(tF4$^NRSS3Qn`(7Om`v8j zpkIi*M$b(9gxAEFD@fmnYt>W!P}+Z5gO)8GTO{q{3JB-?T-q{knqFhct2upGjZ;D%Gz$JCsMW3T-< z7MW3R?vy=s^HF7GW6ra#PG@hR&VoPh@+t8Qy^dlLyBxB2T^nJ0lgy3xVW4DJJkzw# z@1CfaM%p4+BqE0al*@8!iYLYGH_V;DfPC5SD-BlCZkYZdDthvt)yS=#^7Fhs-Op~{ z3tbPpg7nHCkgW2&-8AK`>|-cJpyF_Rphn?k=qK3ur>xz*`MFkAZ59@pN%TyUL(HYw z=cIWxqazdMn0;W&Ez)Q z(>})$gQ@rPtjG8LPGZVAX080fW(4wh){D4_?Ku7KP!}@);$=0}n=xtUlju3uL;q0cRUphJ8ilx++6xGz%Qo~-kT`9PO znRV>}ZloJM$bc(3dCv*wx+FV*Ag<%hyfY0^c*sQ0Z%!!r36Shob1kw6=DE-yr1^MV zjGf$ZXrhFB;K!z^bNM#opobMnvL@NNL(LQP4zuy%MP z{>3njtt|I{Xb6^#7%ZC#Ue+OTz5X58zZ3&< zh6fbpzdZJ@RQ|WRNHB(PN7cKUKro3J`Z-jm>QQ;_eSMuCs4ma-r+l03rXof4yKhWK zt#sb_;MCZQk8(iEcvs4&g&sb^QkL_QR|nTj3Px7{&J84=bN1I)f{J4$^}8WWdby9& zr$WS826X@#mU^lb+~Uz4Cqein!u$vJl7Y{Xx+*AyUvNVIpe(7EzG3x@;LWPo&pWo za{^q>i`<0mVJ3M(j#S5Rb36!Lr(hB$XCZ=O)dQIUb8ipi8mmQqfx$NOMFmQ1>OGeO z6+M>TP*>fOl9I+_D+sRNjA5~O<~A7vh_{SU_s~b~a@23nWGrt9tMtSS?IFB7YbpJe zwf76WVAZ$qWmoiUhA5kU>znt@N6uvg%tdV(;yGJXGCvQ>Vy8A})NeO)&ztU|OsTee z9irHE(Mx<(wVOn};G3>LjRm<9*}O;hey6x#Zw3EU7vwo#CEF>yHpAd)3&8|RL5Fub zsWz<6DBxTiO<^x$F%C9gdT*-ccdYGy6uCVH%&#Lbpt{?mroDZgA{)w-ig9F)@u<~X z(!TnruXPnks5X}|f7u|q_ZvZXI>W_VClJ)ARngHiX^TQ@wjHk^K2>r!izx;@b?+GF zH0rSefjpk@>mgNUY+m(W=9Km#*l`o7-WZ++U-Cr20uA@NqB?VvP#@kU=X`}V&-0oz z1GE(>hgzoG?Qio~S$~X|M%4lY=%m zAivwtQdA{3O7Fv)4ZoYLxK9jr$VRaXZ?;|D>zrP~WIm5sqwExip%xYM3ksl9w(Pg` z!R_L@^Yfbu&I)d?+jnssM??1QgjtO%|84Bqf&Vtv$=d|znQuaGtsJH?vP5|Wd%wGH zU#j2ud3h?Yebs4dqekR+6~`Vdi94%k+Z4~#^}^%b#(NsdyNevVx2e}x$#D*ff@(6? zi*nw__pqc3rO=8!ta!aYdv9XR2Y3*p(H@T}j@|F|Q4@)_ug;(c9rkwH&@qZ4n69|( zik-WzEj4$S+|azRsqf#vTPikvd_3Ctdy+aUP43Wb<2db!Orahiv+)=|ufNsE;i=TC z)C7-U36E>z@jKFEDhvnHYlI2ZcuswvuHUR$cfxQG?@pvl)lqc5l0(nTm`zh`0sNtexTAk&SVAM~I<<}fbg|@M~eCFn3=wC7170{SXaeOZN15akg?;}<^ ztB(z;!@t5s(Mk+3y`x!_mBCxYZE@DUw=)p~G)4xDg4Sp|duE+`b7!D?tj=+^YctVv zC9EQe-(ji^jjncge-JA!+fwT}m5&emJ)9;x2Knh#)8T;(6#N+=7`Or5nYli{FJFmU zqiM2H_1j2^&D~KnI)*1=si`s!lz=}lA>Xxa>ztI&9jyd!8N;PQ=?jujt7#ac(&v`b zRj{qL>rex|A0AUdOXxO@q@k+vwKj&{zU89jw+h@qK!oPw%3;;>Ovin*&h?g8_jlsN;MjbExChRj24Y zJ}5wR>;wdy2ci06%^ZO({(R^)dW8T-d(&D~4uX4=)4#yw&PmX=HZOYTR!xD$OU@Q+qVWR)* zMiZ`!2Z{J=|0Cn2q-}eq4{M|cv3-W-f8$R8ZJoFAsf#jsX)$scDo3z+~20D)&(cL112U-sq2>m$3*MO%bn4iqHa*vV?!b#Y!R=Q zH(e*8LMS-I)Hdw(&H{u;7)2!bbZ>U@afFY8`=D2)#=P(YtWH+;Hh4%0^BoW zt71-rW4e7ejxg27WQmPA5fxf?Ain+16zzsvT_?*vDbY+6P43)BWqMA&**STF7}=x?O0 zVNdB|S1A(f^dBK%Gwyf^^)CkkttTft)WDhWk*X~+m)7lscG>vl-EOJGolmk)?#3Iz z>8qUW95lzX{Y$`2Q8{EVlEhb@#;X~YmQaClrkTtpk^`c)f-F?3=61%vqXXa1$E)H& zhJ?q*&gW7T%FqdEay96>NzE@>94D|!|APef5TKFQiG-B)cBehQ2&_54 zMLmD+mQX8 zBN4~gZdQRD`;PZ>zpp?%62MQ8zG>h%)Pda&>II{VQ0Vd--Q2 zW}KQJtEC6jZ38UtrGyo^-8&I@|Fy@WeW6wV`GzGCbk?gzw6@&2b7Dh{ijB{R_h6}r zXF$ApltKovlD+Cq%P+5?-d>xUwfE;aDu!Po4z!C{vc%EqAB28>-iH3T-7BvSV7#U5 zxn=&o4TA)Tg7d0#hC#v``aONvzYqnU>n!@HmgSv}A=^_21X-m4z}(KXVh>k94@j@XTRu8L}&zg;orhP`5JWGgcCkgQ2y&4eq@ zrk(rK&Dbv_f}x~PVL6-tb~n@5#>t%V&j}!b;jXUv&35b1XAuRe&HdSBnJYMMItYl2 zv7R3PopklX31GMST88KTM@16sePu2a+A@bc=83Hl@`FB{87DmZH2K(q1#TRyH*mCKUJfj-U?jHzR1lCQP?vH+q zL)*n%0A*Mla%3g`)YHlM;OWRaTc$&-5{)e(;~n=X`w*Af9|j98c-mQXyXp4RU;ePcj}wZ*>pc}9Z;?#T)$7O=Pv-Zo zx1Vfj<$&#gPK5S$)e554Ah1t>9GajUx#S5{a>Ck)X~ss8zjK;en(0 zu@fiBDnS7mPyieJtb63Lf&?@-C=?p>pE2J*0nWu9&BN{F$m6)$!(d-}<{y>->}gY} z2LFf4&I4FWkCU@8>$$I%R|~rs|CGU*EWpBwL9bQ_8(@EeiC?4HI z1*ML~#t?yb7yqV;!T__2NJBObs{9-~!2tF|A(!SBF8@ufsexD3f`k?iWY53}$g##| ze>e7Gx&!1BwAQQ#V!PTtaOiHt=Ysz?qf7pF-b9lPh$BK^w3HOr{{^Dv?hblQQf z&5f;9LGd5vOd)m!+u2(j(Y2-Q z^J3V+T&)@i*d;j0V`6(sU+4k*Q`6(~>@u7zR>bEG4XjVW-I^@Ve7!)&al#ajv()R< z;z?JYlLT9LC*FpWizzKUv3fqpL1H}cVbt9Jrew&?tn^rLNw2c#4Ew5MQ9oTx7JIQ4 z`U*i+HX4~F0JCxFKuyn(96xdD3^9$^i(_7;r;Xq-6zZ152agJUz&b2arK8X8|9tT9 z5m~Uf?d^x_TnGOR=08sESjS-&bnLHgj-N0;|1FuDFSnQGpl5^gpv|DL-1=qgS8(l; z*=f8-p9aqvAGD!yIKegJrVpq3qnlG*q`~5*Hkx_j2Lt>_3fh#qN6#_*r<)gIy1*f6 zq(QVEv=N&+WdvWZPZmC$6t=%qHX84a;ljt>xOuXHHs+h02*tlf114V$I66Q)JL+Jv zUTtT;CC@{|-Ep+pAJ#){F}#GTCuMjS4<@30=38?2(v$3@!%1QLb2?6rB=uJ1z)d#h zaXuBN)h9JKis54^NdvQnu(Y50Gafr2gYggrMN z*^ET)jeGHpiMrI3HvZtO)yeq^(&RoJd+kR{a@=Qot8gg<>N~zDrG-gm|6{xnxpxSzDRDlQG|K&D{+4(o0iADo=Z9AZ{j#spPt?{D zGwgn!N8qMH#c^q0Lf@WobaF}%g?gG^qdjV=of*9Ik?K*_dRkwq%J+6-BVydg3i9VD z6CO7wZ`&q4-!yQ#60{S5KPEDwO(4|Es3GW9Pt4N2_s^D);}}E*gi@H`c1!Xa zYNuXeSwmmcW%Utnwn#ss2Tju{(xZOzUa@)O{kuqYpTVNCX zeXYQ59x}m$DN4}MgeSgG;()_b*}+E*%dAbGnjNL_z?$poo~5l?bYDw(k3d$$05B8r zQQ+FysOqtf$<-#y8%SSp64(#lp=#$7xZ8t0UoTrEFc4VHd%9W3S`FRfzm)5OacYZ3 z&CB)J$k>=ZD{0Vm!Sa*0OOH~-{ays08gb4Y>wF?wJ;yvDrQgOYv#@DzXh2%BHU>r+Gcuuq2fwLKY#JZ4A#cA!I(#s^T;k z#iXWP=zSxPP+K1_09}$+-QMP{z#gL1njF*Bwj*~-GO3rR!GjsV0ip&qQA%x zT=X>0K^gR(f>d)aGP2_+MV@>T0AS(2BE+ihcv6bGqzahxCyGz&q2or~9*#iKKYBaq zSe;<*KN`I=Y@2*jCH7pC(LJA@kUJ7IvhOotKcUy!bf+zem{i5(M!2xBu=#MpQHwMK zq+HqE)xc)VGNa?lxe?PKYPTD(y@;q@6FA2r)OgGbCIHEQba(Sp9RBKolKF6Z*4NT5 zTqOU&z_y;?;JV+v_i)J6uefc%Izwfrg#h&p#R?Sml|0;Etf+G8_{F^1b*?( zWv&^SG{^0Q@7|)h3ZA2zEpZucG7^Y&zMpH!Lr2x)9_DDi|dO#bDVvVIFdj#-Zpo6oI?L4 z&%fmPZm^JGVcN&8?@ky* z3t)baMA(^oP&vA;uZ#!DzZ-4$s8L8WPPbBnlt5f^UO&>UqUy%IW-mpyAuNF8`>^7DxkUPnkE zYpc06AwzS&W^}J+SJNHX;NTla8mqzva>tvN`KoxL7s!!w)szu3!l8Pgo_5L{0ih?a z4=!lr1@9h(1h`ml&3`^1@JDtKRsVOy>~*~(nWgtPQlC%`Cpvsl$<> zzZEd(k%&o@6nyFMdx8JpoDGpzxe?(auBdtrmGGoXQ!?mxso)A;+yO15af3$B|OZ~*zU$> zpY!jUtUGXAeQKll$h8d?U!J^J>W;&;%4v_3VOKn1PR>V+B)N@62}QY^I84qRu)z^n z4IL=<3WC2Si=uvAwzM;P z`Yi7vj>^7AF4t>QI0OQrh9H%~#rHNUV0F*NKl@7XaU6n)gA9*YN!{Jt?qnC_@Kwx{qA!syO1g!_Pw8*z-jXR$qfjk5 z`)~+#X<*WGwkUU4&E~I95QMf{0jEZmm1meGvolV@Q*Xk%yB)Sx#`E*@*UOUb+C5E) z>Ls&TeR~uT_LCg>@uS%LM`mM>Da$@?Mu3u6i=dWN=gypgNR;5#IK1UY;jqgb18VrZ zU!YV$J=9E}y}hhY z9<1<+)rrQZzjsh;^CeS^FGTEqekoB)@~Ai}hDeqPPG2W;LQ*U@IYh54#( zW1SkN5BhA9H!(U(a2a95WlRQ9ZQ))|+Ms2lgYA?(2c}&nQdd}QP9(N7Z>q2C3%^UM zpj_4{lHQUR?Tu5BXT8>MJIWk)Oj8ay0;Ul2CwHt`(G!W3{c97p<30Lj4j$wXFfM4EU_(7izH zYFVrz+U-RpqSi{B_4HrF(D(xdnP4rU`?27TP(O3H?Nnfg+H%C_zP3&}!E$n5DP>kJ zu8PCELL!l;XmXmoCuL2fQR|Vbj?46+F6Rcqt+6qsl`VNU;zA>0Sw2lPSA4UFa5Pb(#*7va-A^ zw~SBc3tXRY^!M(o3KG`AtvB_5nW&1t?wBVNFHEYpIS_6@x#m|;pcYtmJ8R~1_88`= z`bv|p2V$`9LFrnp&<$Qg#}k3MCMh$TVkKuYw>)RTo-|hMSVyo!zbjBkZbCP-wv)l< zDYC4w^E2k2_z%jZT^gCWx^XS|<(qMp!A8<;)n;G7qla^A~V3VHJ)ok9=i?ZBA$sLUmj>Jyq5<*P}sX=`E*wA<89n-Ed9P z%jHZUr_`L@$|8qcaoH>NjBBO7%hvp?2+MS9`bq}b^?SyYs1eN~+m!6B7?#2cvtD|q zV>0H`&i~a5kk6;Cr>7@6WuNt!MyhQxQ(?+Sl0`)Zq5{=g5hIL~dlE-o?6L9YMfl{T^m4-TTS{>7H-O;b+ zoP;HGWin=vcC{@_w7ac1S*n7}qpp_6NOm!>;*=cYs0baU63E}RX_)j6F}ncEhV;vzKeKWAaK z>SXs_%6+A4#c|Rr^MOkUn=$jVL^ks)Ft;X5!a zq>BuGM&^%=eQWMDyRs5u#aVmqZXuHknknG)`;@7aX?)jLiDD*3lu36NuMKWq;HH)9 zpNMjx?Ed&Z?d6ufjZ-s*)r7ZqJv7HJh{3MBkj8IQxSbSP)Spst(l2hXZLSAPgt(+r z9=FA8ZUw6&5Z8tyqq~o7y~zZy$KUM+_?f9^x?4a{VHkq_^$C-gTXfc@=Gj6JO_JAg z3)vE?H$WuYvcQ9z7rXiCQ7-{op>7)#ZYgn+5MYf$?=0u-R{H7?R7KY%zHw}!gb60- z{`tFti{KX`?zC;OT!=~l5`Wh-sMQktE!;0`ilsmg3K9Qb5E3L<1gEWCQ#g7)!1`jw zFCEH=B^DzhLNM8qo`M%_@cC}Vz1y|s!VLgKJxjWcTiap{O7ZKxlN58)+j`S~AM~G$ z{vYbmbKYr0zW^%iW&DnS2>O4p;D{si<*XFDI|cKdzIV0q+oQRd=#OIe{ga>Kef*#s zYF_p%Hm7enWL&{bT?yJvHJ%2Q>c4w!$RU30_?oeg&Zb;}KWkR3zGyA^#)bRun*Pam zNy|^Vs#5I!Lig1wt)ja)qj|S0{n7l}|6o$6+aHWsjw>AH4zREOqKS$y00>adPHvcRm>C(dW)k82MfBnspxFN{y|p7 zmVD*jF$7M`;K3x0UKE=?YBr<4)M#=kqfME_6P56e=hU>?zS)oQbIf^mI(1}Fc^)w)I4xTgxT5(HDq2L!3@7}v#U!iuS$8G4qQt+91C2rieL+ex7btLQ-N z<@hTFB8Q5jHy|KI2exSmw4Y@~WKxvoHBi|xE_c_p%lPPlT9!i_3N(viQ#q zWhGym@afIs8l0V43{G|KC9PZ&T>O%i-KR1&<1_hA{$NmlH|~@xIw?=g9x>1Ss9Sxu zbX5q`*53Nid=OWR;gnrc$_dXyjtb}kLTCwD)Jt5edQVQr^m;navJyHAB`(Qk_N>;0 z5j!WiAk)fsdmS}XHF84U)N>w+mDxFl-#%h0V(U@8hQ8htCz?pYJzv|dt*@=_vtyjk zr48z^u00Svd>$Q`z4w4dZr;5$Rq-;^@KoRza|&-Y2xrUn!@WPbd()JDQM`{Fn)E58 zJ4hbkx(LY3xv$$t(EocQEjd@3e4E+h!yQ*Y5&7Ft&*EGuSJJ2%bU?;}WZa~F`yQ~g3b(anF=?!2zwNX*)b-|WzcJY;W`?jTx}+rTIO zm4it#dVGIK`+E2T$jYP3z$QIYj1%JUKNTmx)M4C4J3^b8jl5dYd&%;Dg0kV4$nP`C zLIcjk4h)Stm-@tYZ%fiTfIoShF<#DPwb0kLry`pxA#5u4o!UOfQUN;e*)~O5k8bj($lofgyBy8H(z}TF}}8(@5R5m z-kVSL8QiZv79FP1t?mqEM{cBHohLt3HIK$#ag-D34%MqA6(%Tgp{@w}8YS)WB~*L=u9&8Dz-A9G&O;Nq$qJcu|D%+Qup z87(yEtZsV@ArKfb+!50m-_i8SxZ!pqj>AI#R=SRO^6E$BJ`a6%QukwC%%HQUS$~d^ zVD0`|{!l$mw9TrOSXm#9zgmLYtw?YI{b67CWbHiFBB|0 z4?m8sXNk~7b{1P5i|8C>c+Gs{bd0_VTer7B?8E>~nOovubEOLxr?IDqnFDD?qis+e z(DvN?*sAnRFOx(`M<>R}=gNmUMrrkE7Nbgv=f!)8-zV>} zQH;skSaB~0@^w12NRi6?F)QEA>OD0{zhUZqPhNmlRA+`!ezQkS;OGo0a?K|L#TDGUWQRo?QS zRoB__YGzFIMYxNt1`oiG6EO8=9}e>mR2(Dvt}Zz}3`|GX*VNQF+wVW-EMu3PZU2_d z@oK=5p_1&?!mzNg=AbIqesPA${Ju4LAubbU+_&jnuFfoblGhA*0<}Zj*7yY zADa6Q8JV(5dZifqav}&+c+;DvB_iv2dBc8)>F<%ww#gPtS<)k%N6&|uMvQWi0kw=gB`lUsDgy&ADX!03wLKdWI*`tT+^uat8#@gKT5 zf5h+pdd7Zv{Z(`t|K|+4VQ3 z=4r|jR)$@OyZl{8FT0cbCR+Q}fE?@Zz0vXGPr0ize(&cupXI`np{+i1hY0$TSh=u;YJJ@wMckqMa& zS_|o!80Fxa@{^7OTCG6p%d4D)DCz0Qjo>Y~n10FR;C)OV5bSsQ)iW#0}_HM@L;DXeFESS>4?r}P=URh#dfGm~ua6^yw= z%O%Io%6do8)8Wcp3yXoi4J(dlv=JZSd;slqO6DAYJS_INT3I{ zSnBSL%GU}Q@WZKX+~<$5IK{q;r8xHI0cn9fShHnN7B2$68AP)e_qrSHPijsFX6a7) zzUF43!oyzm823Czk7dFgnfroq_10xVs~x2IY!boLWaTZgaujLIxTH-QEF>+X{ajzH zC=rV3ew;;Q_re*8qsEt6eqz3$ca(fBeo61Hn7S{Hm=3uR7peJe<$>(twdm- zc(9|a&xPtkYpadhXjhk!zRzuQb8{P;KRJkVmpDL=85kJMln~~|5#X0>bgiB~RGlmA z7f0IYxg5SU5uva&sVbVn!p!V9?@lTS%gWXeXIyIQUF!$Y5qi6$d9~BDb21!(_d@KM z_&GEHvei)54Pv7rAamvBXMzINMRGsob5Q3^Bg;wnN50R1BCZ^-MNzm zEchJSw_O;#WXGO$Vy|47m2wD^q``7K-b`|sl^F~qK{UGxr zoC1$O_TVbBjI1oj9xPb5y=HQBOn7*>>RAGTfOwdiem=|aQEJO=ow>JEDyCJu+R0~x zgoFeIn;IKAe1`p}yuOZ79-(H3|6&>&1q1~Jg@hb$pN59LUr2-S_Bm6J#(jnI-Sj&N zJkcrXtk}>UUhuek_w>XLDeC9xhrP;*aw1c6sJnCXs&iWzkh@X&`NFcYYs3CCaR+u? z;dM9ujv@UJ%FN76XOb*B%Va>A5MaY4b!z=La2KlyLG3T!m*bI!?tcP@faR4L*KyE!QE&ZX>ouy5bK zZKlE3)zvM?J-9b_)Z50!#@SiqQL44Ib-FrZFq33j&CV+NO4{vN}cv?T0e-bg*d)C(JL2k`R;>jsxf!6jtwwDnn#9*GlkV$%Q^?`g3{8` z;7(sC2?+=Y2nmI(&3AY=y{6ez zU7Q$}j_xrT9W{0WT?=s&>}KAc|I!0%Vcl@1B56l}HRFZnZ_Ga5`;@{EO;%vgB!h(A zNtj{M?J+|+Bv;qnFzuk^`1pOayfoKSmHCy*=_h>EWE~yT6$s5LtOW3CM_38pFx1Tl zOe@?(lQTMdlNFvS3Y|IgU_K?M<_UgCa;qD0!{!v!VF&>C%=FJkI|A&X-19A}E!Xtn z?X{Em*RNlfyH7bVG19I(7~)t=eO_BOk`V(No1r|Dlm*u81|FNM;$3`fNZ`~y6)w$} zaPt?JdM7&}gjR(HW%nWDi{gsg(>nnW@v%ctb$XY(`8{f^2*L^GoDB~lE-o%D&Bmh` z`S`IND?_I7Eeng2m8S_^U0txAQX>;1qsI<%cQ4rJrJ>5rC({n>NsHt`(JUuLb5-Yg z&m#Sh7j!s^PQysXo5akYJf;-P0&r;W9%ne3KSvRIS4Fml0O)xs1BZ&rcD2g*5%7xXn%BFYf1ckimC5>8;`A_>G=BE3IxO&bLc})KP+{o z_E6AB-|Gis$jc@Dqk>=ck1mV7I7cgWcAr#Ppqos5{#6IV{ZEyD>q1bX#28HsFN(bF zkqOkQSj^1Rok|s1#`M9+p}>kY^-qye1N8Od)dz2Z&3mZubU8>KbTuw6j)4{7ailMB zFRhxI+GJPhTe(Akyu~%`&@0_j?daF>qVAJjtgNh_)87?0QD*eMbWd!vj*W)W)F-{H z11z2fxNDzNgiOjy*O_rM7FD1kPl>r&d_7i_#)&a9zVpTW(N7rWUMMFR;Vwdv&BSSb zG}|R!p6gGY(Zafvx2-X)%>TRmOt`2eK2vdx!9|X6Gzw;nR zkWyAc!o#B6F#3?Y&qX|V)lHWwg3rj{j^yr&&ubAi;r7`FVui?dDdP(s+Rg_M69c_N zrcy+0bT7WA$xqj&GFgqAjk3~K%Rw}79f4@1$K-%qw8C;7Ue}1zBSi3LT)7LkTAVg7 z&=4|s@y~ny;8nP_cehwwN_vn)TA{=bRz$&J!lzFcqG?aEv$NY-$>K>R4)w!xjiBx) zPBj0Hg+6?n(}-t-NjCEbCCXJqDWIAWntAA><4`>47LP-O(kLH=gRd-p$yasdHC<^8 z%`(PsdGsy~>YBALQv~1RTq`V_U7e~7Jx0LD1t0&w&~5H#nW}w-9#zsdw%gqqFiJ&x|v+2EgYV@{NuTiTX4X6HCRXCh5`fMEfp z6Gq$(`tZ1~Jy2JMbu^xvV|}6I2rX^t18u_$?fxDNr|$j8FEUq?7R4hg%Xp|A5vB4g zBklHCz5Wvib84D@5fT=zP#SLxi7>wzV&K(+ZI?@!W!KG>aQdObcW?abYnZjMF1!N{ zR|q|$`;f-ZiO|6-zwCRCTlmc9L)s=Le*FSx5u#2vVn1)1ccBC`GxN|!*sPMl1LB&R zGUcMqlW%G8!je7wvbdPb3pCpQ)-C9D!Zb8A0O&n)MnCMfqpu#ay=cJ-Yc0=zE^wMg zo5${WaSml=c1ye-^1w5i7i>XQwx7?*(|QH|-bN$!YQ78aO!ka+KY7MmdDP=EWF7wa zVNg>S_i(t>`*?8E-IgD;onFN7Vlg5PKl7&nP4{J^m<*Atqb%!}EwEr)gU*t0w0L;< z0a{vr(%K^21N4ZUxi|Ud#}#eB);{66d-uvfdyZi*yb2jBWa;3-pC}4-6xBv@g|y2W zms^hP>Ta@LcVjua z2NDXT5@svhG)Lv@qAoc7)eDea=^K_IZ-MnL1wQ@vt`!1PT_?+7w$j{LM|rde>&PUPpr5@*Ws>-iI3rI z&E)L?geHQQU1qZPrbG?4Q1xE{>qsfZdb$P;#xRz|)08d8j-DG>W)2HX_qv;fSex(c zNr-|r7GCNHBW)1L&$mV}Me=?>aAIoI{v0lLhowM-K)L5nTat2O_ks##cUv2i=5G!> z_YW%fOm|g53)HC%NIB!s)P7dN zk00jG_HtNa$$6a!9tQNG7s4)HiR4g@i#-qjS6QTM{{ih{Kz{*p4)w&2C3gM(tZIae zir9t~#aB~t_;sY&X~gjuzlejDSdQix1jBX$>Fc$WIZ-@xyFnk5+xS;C<;CFPup0Ao zHA^rJl=!N=eoe-@#8L(_afX47dr3^d1^Kgca9_ZpW;`gd3jUt3K@z5mf+%| zWhJbxu2xn3Mk5t2blJgwv&)>g>QVP`(2 zq@VQl^pvz13tgDZq2bOo~lG%zN{7`PRe?WZuUF*ONg8D zK@^{FpsK;I81lqF|VM$Jol<Lag;3OI!gLjbRA|GWjtrALmA|k-qWssh&AT>iO^6;xfp=@U6CcM zhDSXn)ZFYM-X8N@OXq9u2bd3kb>~>%LI3g!0DufP9^AzAIi}ZIUn>qXmQ6Ypb-^mV zWMQVib}a4zBq6|HoIQI;V4v^G!bD|dWf+T4PnoOjz04xRVh7_2kJn%r3lq3zbL=Mm zhxi~MpsM*5f?z{re<>;(?|ry2Fji4~t{gRHX@S*rTVUKiM*U83KLXNN-7jC=t{7(N zBs=lAUUIq&?p^l_6)WP?Q*mv6C1TXg#Jx#h-1By2+w%k-+2D;Wb1K_I~&Odo4gySiG3P&AeW;O=)th#%5m~wD% zBqb+{(R#&||1S8`XuH53DVe~7{CDiU&kqZCm$bD1_yj6(>4=$$%jQ)HGg@7%PYJv@ zau{_4ADltGwmIM-KZg0<&5__=d)7j%z~8 z!_}9vdsVN=fZfpT5YtciAGdqq5+!OP=3J*pcM0*V{T#P4Wzy>xK{Qg8zkd{pSofMM z_yO7L?y`B&tPdJ)B4?sLS$7E4UIjy9W=^94P7Odr1h~S8h=ZG;0OW{<-c>zQ-!>dB z@h(j_4!6>#XA0fX#O3+1Eo1;m!qSq*YyCgKh~nep6BEHQ_~Pn$6sKzPY?ny#@X2;| z<75U-oJ5=*b=bE`G+iCs#1jUSLnAGjjs9a6So^U{FSlmI|4JG*RKo?@Y*prV)qB)I z0JRZ_SgOR{NX=mq$of zk4(!Va|h(c?lQzkm{28tWTez(SPK`8mv*0oxA@G|u)u-#Wo{D&`umpOLpli@7}zz? znLhLgD8F39jtwiy({ha^+ur_^0*(h*FHRYc=@t^PgKh1eB)XhJehulr_WgYz$e^Z1 z72xxl>`x{Mqc0rEico3?(8(_6LyogJ{fH9{=O;%;N8j( zWzloz5Ty0BnVA{jwB6jq41#VuIRR}eyQ~^s`2ZNrn+666;Gds814ppL<-g)Db<)+9 zP4T<`>I8}P@Zo3hKq5^6uJ~h8h(gJQ5(y*Rr++FXEl?r+pp>Lj<#j|r)A}Gkq$9aQ zA$j(v;$eaF=h`zHVlHu4&Z_-!_GIgUUM8VC^3fEbG*S&04zQAy&-^q2VlG4m4+*mZ zVS;A8(=f*n(c5!g3N=QmdoM8o`77&O(8=Z%B5yL$~rc zXfywf>-FGI7-#pF=;JXuc3-O@xo1GY^ACxt|+0YaEYa=_vPkVD2#TqdBn!xvfroiO_BMqU5d>akZ^+8iVJ)GQ| zi4ujABq7qQ5Ylh?j;SeJ$0D%sRaI3BJc{c4zT{BZnsuEdUX%pk6PzogeGoSNrnwSE zR8MW+^qmxqRO6xK!KMe6{6$7=QqRkp)2XCgfciCwhHVG-{iIiP;d!N79E~q=&n>zd z{do4Y*A{}p?K_JgBo>vFltA@CUS1xk6;aVSd~>>u8JX9FkMFPR7(q{{wf2PrOG&DxgWu53)IZ`S>?%wRI z*vR1_a2WNMTYmJ-);m_r13~QvejC!?$CochT)u2l;Wjs*j;7tO;K+I-bNSGp6)wAf z+_W#?n(Z1K9L&hbfTD~!K3|wnU9IvkbuT5QLwA|${Ae5b=C5BeG)(>1TvM;WIj~CS z3W?D$M9|Mg@_<%p`Bx6Z7$gavE!FWNRia-A8I{0PQ04ma7~FgV4nT9)%QHc_jt+*7;z^GDI^0-|8X7DHWEM^FLRZfOmk3f!UMr4~Y(%g5R1)qt2sdfisQP)Q}0e z7d@|>X!Pa;DpH}5<9NPYpx-iKq`ysId4l?S>Lw-s0)Wel7o2iFhil067`RDbkU=#7 zU6y#wkCL%6xJd}Ya3b8BD}1XfXwnK8*!ms&6|gtP37>W1Fll{?WCAOPL*d|!pcmrNn}aGjtzvC)MinHVb>fmMO)H$QVy-D!<<>By-MH{2v+g^lUz8sv%$YYKN|1$;}(ThJ70J= zxHM!Y_b9%E&%w+9+b3c)`TV zz`y{R=2ll%S5s4>hoesX$J%qYj_!k_RRI7H-6q@yKgVRlhJrN%LW2bGk!~2YA3S;T z1Wb7^EhofJfJ5yVC?5Ac?6oMF%b#QSi(s{JURwI05nU^9vm$+l&h+-$&B|LMcq~)F zcHc2^gb2C8%)@-exmPX%$BQAv9Rebm1_rlxn_dwYX z(?XN;)l4=H#~LtA?7VpKC<+54ZrN{}N3v|WzbH5WOA0lUldzA@LoHxFOIP$P0rFW! z<=SXG025Fk5ISflnOm?e0Mmlfi9e)wc6N49sWmr0ex`B;0t7%ZQPC6k{XSw^ar+Pt z;WPiPNN{|ih48o-wCD2WThc(`mEB+8s6en5@_Ct1U;!TK4g;V$oM#V&(P6`KS&!+X zUU$-ppoFNUsVV!?K9t~TW_GOMzDcfq^D-M)uGp@!z7YJ$fP>H*8}f@9?c}?F*M`u% zEQq~EZcu>?fy{8)8XhNq8#MJayX@y}cW8b(3>o4L9A{fml$?4CGM#X92L}l;&hRxI z$~CR!&jhyy0XNJd04A+_(gUrFHNThA+Znd#EdEz++l*8z3!p^nlMLFoY;Ze~q`V`(UJ^ZU3@p250?-mFc z*1hFh#m0>`<9N)+Vq#!m0QEfHW;53an}CS;HhZs$BCoRLDVu|?gzxY9nj%gc!2^^} zkTIA4zMlg+`bcFaxpDay`i9C3!8#dNj(r~m7dO*9IKHrHaDj~vBpW~Ff z*g;Vln&)Ci-iFXw%_qJvjt34bv!@2Jy%IpR8|u45A>WQ%IC`5Ru^M|U^x#>Hk;uZGpw${xtO7XQ6y+?xfe8a9KQ8 zdt%X^i3myKIX5v@r^D9Z}=fwxKlxX+8(oTa@sS_SXA_w!$*1SK}=FlIFBDeYc z9rH$+PXMdEQzpB1p>TT~NnwS7t2s%Bj=LL$#{7;w^sk*YLPYRZUZJ0VdZR4J z7$ryHPTJU^??gtMQwS}_*k8%vXrP~5?Sz5mhBsX(Q#h{cFmeTsTobwq(-!{=xfH;# zG^#`W`{d@~MKVYVfuN?)s(;u@%y5Zu_6C3d&V=Pc^=APNIQ#AIdDW+s#bv6lwM_vH zUr))vN?z5c>`wN3Zt%apneHg|F{l=iz1a5rhPr3mBz%sq0g4Es;9=x7$hr$Xp)T@0PQf&3YRjJ;Yy(;0ttk5%(v}_BVFI zM0wBHiF=Einvtv>5UVt-V#bQ_UVd`-Cq)zmnGd^k<+g1|?N;9Yljei5K)L@?W4(QM zPp)qYXzmpD8vYNyGl34;^4A2miJZ;`y7t$6B5;KX8|w1^j#564Q`8>sDYDt3-`@PI zT3Y))$o1X0q@#)dy5Zm0<7}BWd*uIw z_|GQ&pC69!WSqbs literal 0 HcmV?d00001 diff --git a/report.md b/report.md new file mode 100644 index 0000000..756c3df --- /dev/null +++ b/report.md @@ -0,0 +1,117 @@ + +# Отчет по практической работе + +Развертывание системы сбора и визуализации данных на базе Docker, MQTT, InfluxDB, Telegraf и Grafana + +Описание проекта: +Симуляторы сенсоров, развернутые в докер контейнерах, публикуют сообщения на Mqtt брокер. Сервис Consumer подписывается на все сообщение, опубликованные в брокере, и заносит их в базу данных временных рядов. Сервис dashboard отображает графики полученных данных от сервисов. +# Предварительные требования + +Перед выполнением практической работы №2 следует проверить необходимые требования: +- Три виртуальные машины из прошлой практики "Базовые принципы администрирования Linux": Linux A, Linux B и Linux C. +- Разработку вести в VS Code (с созданным виртуальным окружением) или в другой альтернативной программе; +- Установленные docker и docker compose на каждую ВМ (https://docs.docker.com/engine/install/ubuntu/); +- Репозиторий на Github c двумя ветками: master и develop; +- Установленные Git на каждую ВМ; +- Клонировать репозиторий на каждую ВМ и VS Code (можно по SSH ключам); +- Установить MQTT Explorer с официального сайта (https://mqtt-explorer.com/) +# Linux A (Client) + + +!!!Перед запуском контейнера, следует отредактировать конфигурационный файл (.env), лежащий в директории vms/client/simulator. В графе "DOCKERHUB_USERNAME" следует указать свой логин в Docker HUB!!! + +После этого запустите виртуальную машину и перейдите в рабочую директорию: +``` +cd /ВАШ_РЕПОЗИТОРИЙ/vms/client/simulator +``` +Запустите контейнеры: +``` +sudo docker compose up -d +``` +Посмотрите контейнеры с помощью команды: +``` +sudo docker compose ps +``` + +![1](assets/image/Linux%20A%20-%20sudo%20docker%20compose%20ps.png) + + +# Linux B +_________ +Запустите контейнер broker: +``` +sudo docker compose up -d +sudo docker compose ps +``` +![2](assets/image/Linux%20B%20-%20creatd%20broker%20container.png) + +Проверим с помощью MQTT Explorer: +![3](assets/image/MQTT%20Explorer.png) +# Linux C + +Запустите виртуальную машину и перейдите в рабочую директорию: +``` +cd /ВАШ_РЕПОЗИТОРИЙ/vms/server +``` + +Запустите контейнер: + +``` +sudo docker compose up -d +``` + +Посмотрите контейнеры: +``` +sudo docker compose ps +``` + +Если они запустились, то следует вести следующие команды, чтобы создать базу данных: + +``` +sudo docker exec -it influxdb influx +``` + +``` +create database sensors +create user telegraf with password 'telegraf' with all privileges +show users + +exit +``` +![4](assets/image/Linux%20C%20-%20sudo%20docker%20compose%20ps.png) + +Возможно, придется перезапустить контейнер telegraf следующей командой: + +``` +sudo docker compose restart telegraf +``` + +Можно просмотреть данные с помощью следующей команды: +``` +sudo docker exec -it influxdb influx +use sensors +show measurements +select * from mqtt_consumer limit 5 +``` + +![5](assets/image/Linux%20C%20-%20mqtt%20consumer.png) + + +# Проверка работы + +1. На запущенной ВМ Linux C узнайте IP (Сетевой мост); +2. Откройте браузер (Например, Google Chrome); +3. Перейдите по следующему адресу Grafana: http://:3000; +4. Перейдя по ссылке, Вам нужно ввести логин и пароль (admin/admin); +5. Перейдите в раздел Dashboards: + +![6](assets/image/Grafana%20-%20Dashboards.png) + +6. Откройте его (он загрузится автоматически): +![7](assets/image/Grafana%20-%20Created%20Dashborads.png) +7. Перейдите в дашборд "Docker Pratice": +![8](assets/image/Grafana%20No%20data.png) +8. Нужно выбрать в каждом панели mqtt_consumer и данные появятся: +![9](assets/image/Grafana%20Data%20Panel.png) +9. Готовый результат: +![10](assets/image/Grafana%20Data.png) diff --git a/vms/client/simulator/.env b/vms/client/simulator/.env new file mode 100644 index 0000000..d1bb317 --- /dev/null +++ b/vms/client/simulator/.env @@ -0,0 +1,6 @@ +DOCKERHUB_USERNAME=ormask +MQTT_BROKER_HOST=192.168.31.160 +MQTT_BROKER_PORT=1883 +BIRTH_DAY=21 +BIRTH_MONTH=5 +BIRTH_YEAR=2003 diff --git a/vms/client/simulator/Dockerfile b/vms/client/simulator/Dockerfile index eb66b3a..ca25f7e 100644 --- a/vms/client/simulator/Dockerfile +++ b/vms/client/simulator/Dockerfile @@ -1,6 +1,17 @@ -FROM python:alpine3.19 +# ставим легкий python - образ +FROM python:3.11-slim + +# создаем рабочую папку WORKDIR /app + +# копируем файл req-s.txt в app COPY requirements.txt . -RUN pip install -r requirements.txt -COPY . . -CMD ["python", "main.py"] + +# устанавливаем библиотеку paho-mqtt из req-s.txt +RUN pip install --no-cache-dir -r requirements.txt + +# копируем код sensor.py и main.py +COPY app ./app + +# при запаске контейнера запустить main.py +CMD ["python", "app/main.py"] diff --git a/vms/client/simulator/app/main.py b/vms/client/simulator/app/main.py new file mode 100644 index 0000000..23082f8 --- /dev/null +++ b/vms/client/simulator/app/main.py @@ -0,0 +1,66 @@ +import json +import os +import time +import paho.mqtt.client as mqtt +from datetime import datetime + +from vms.client.simulator.sensors import SENSOR_CLASSES + +#MQTT +MQTT_HOST = os.getenv("MQTT_HOST") +MQTT_PORT = int(os.getenv("MQTT_PORT")) + +SENSOR_NAME = os.getenv("SENSOR_NAME") +SENSOR_TYPE = os.getenv("SENSOR_TYPE") +FORMULA_TYPE = os.getenv("FORMULA_TYPE") +TOPIC_MODE = os.getenv("TOPIC_MODE") +PUBLISH_INTERVAL = int(os.getenv("PUBLISH_INTERVAL")) + +BIRTHDAY_DAY = int(os.getenv("BIRTHDAY_DAY")) +BIRTHDAY_MONTH = int(os.getenv("BIRTHDAY_MONTH")) +BIRTHDAY_YEAR = int(os.getenv("BIRTHDAY_YEAR")) + +sensor_class = SENSOR_CLASSES.get(SENSOR_TYPE) + +# Проверяем, что класс сенсора существует +if sensor_class is None: + raise ValueError(f"Такого сенсора не существует: {SENSOR_TYPE}") + +sensor = sensor_class(name = SENSOR_NAME, + sensor_type=SENSOR_TYPE, + formula_type=FORMULA_TYPE, + birthday_day=BIRTHDAY_DAY, + birthday_month=BIRTHDAY_MONTH, + birth_year=BIRTHDAY_YEAR) + +client = mqtt.Client(client_id=SENSOR_NAME) +client.connect(MQTT_HOST, MQTT_PORT, 60) + +print(f"Подключен к брокеру MQTT по {MQTT_HOST}, {MQTT_PORT}") + +# Бесконечный цикл отправки +while True: + + #Генерируем новое число + value = sensor.generate_value() + + if TOPIC_MODE == "json": + topic = f"sensors/{sensor.sensor_type}" + + payload = { + "name": sensor.name, + "sensor_type": sensor.sensor_type, + "value": value, + "unit": sensor.unit_of_measurement, + } + client.publish(topic, json.dumps(payload)) + + elif TOPIC_MODE == "value": + topic = f"sensors/{sensor.sensor_type}/{sensor.name}/value" + client.publish(topic, value) + + else: + raise ValueError(f"Неправильный режим: {TOPIC_MODE}") + + print(f"{value} в {topic}") + time.sleep(PUBLISH_INTERVAL) \ No newline at end of file diff --git a/vms/client/simulator/app/sensors.py b/vms/client/simulator/app/sensors.py new file mode 100644 index 0000000..73f877b --- /dev/null +++ b/vms/client/simulator/app/sensors.py @@ -0,0 +1,123 @@ +import time +import random +import math + +# Общий класс +class Sensor: + def __init__(self, name, sensor_type, formula_type, birthday_day, birthday_month, + birth_year, min_value, max_value, unit_of_measurement): + + self.name = name # имя датчика + self.sensor_type = sensor_type # тип датчика + self.formula_type = formula_type # способ генераци (случайные значения, синусоида, тренд, день рождения) + self.birthday_day = birthday_day # день рождения + self.birthday_month = birthday_month # месяц рождения + self.birth_year = birth_year # год рождения + self.min_value = min_value # мин. диапозон значений + self.max_value = max_value # макс. диапозое значений + self.unit_of_measurement = unit_of_measurement # един. измерения + + self.value = (self.min_value + self.max_value) / 2 # последнее значение с датчика + self.direction = 1 # 1 и -1 направление изменения в режиме тренд + + def generate_value(self): + now = time.time() # текущее время в секундах + + if self.formula_type == "random": # берем случаной число между min и max + value = random.uniform(self.min_value, self.max_value) + + elif self.formula_type == "sinusoidal": + amplitude = (self.max_value - self.min_value) / 2 + value = ((self.min_value + self.max_value) / 2) + amplitude + math.sin(now / 60) + + elif self.formula_type == "trend": + value = self.last_value + random.uniform(0.1, 0,5) * self.direction + + if value >= self.max_value: + value = self.max_value + self.direction = -1 + + if value <= self.min_value: + value = self.min_value + self.direction = 1 + + elif self.formula_type == "birthday": + value = self.birthday_day + (self.birthday_month + self.birth_year)/10 + + else: + value = random.uniform(self.min_value, self.max_value) + + # проверяем, не вышло ли значение за пределы допустимого диапазона + if value < self.min_value: + value = self.min_value + elif value > self.max_value: + value = self.max_value + + # сохраняем последние значение + self.last_value = value + + # округляем до 2 знаков после запятой + return round(value, 2) + +class PressureSensor(Sensor): + def __init_(self, name, sensor_type, formula_type, + birthday_day, birthday_month, birth_year): + super().__init__(name = name, + sensor_type = "pressure", + formula_type = formula_type, + birthday_day = birthday_day, + birthday_month = birthday_month, + birth_year = birth_year, + min_value = 0.1, + max_value = 200.0, + unit_of_measurement="kPa", + ) + +class TemperatureSensor(Sensor): + def __init__(self, name, sensor_type, formula_type, + birthday_day, birthday_month, birth_year): + super().__init__(name = name, + formula_type=formula_type, + sensor_type="temperature", + birthday_day=birthday_day, + birthday_month=birthday_month, + birth_year=birth_year, + min_value=-40.0, + max_value=50.0, + unit_of_measurement="C" + ) + +class HumiditySensor(Sensor): + def __init__(self, name, sensor_type, formula_type, + birthday_day, birthday_month, birth_year): + super().__init__(name = name, + formula_type=formula_type, + sensor_type="humidity", + birthday_day=birthday_day, + birthday_month=birthday_month, + birth_year=birth_year, + min_value=0.0, + max_value=100.0, + unit_of_measurement="%" + ) + +class CurrentSensor(Sensor): + def __init__(self, name, sensor_type, formula_type, + birthday_day, birthday_month, birth_year): + super().__init__(name = name, + formula_type=formula_type, + sensor_type="current", + birthday_day=birthday_day, + birthday_month=birthday_month, + birth_year=birth_year, + min_value=0.0, + max_value=100.0, + unit_of_measurement="A" + ) + +SENSOR_CLASSES = { + "pressure": PressureSensor, + "temperature": TemperatureSensor, + "humidity": HumiditySensor, + "current": CurrentSensor +} diff --git a/vms/client/simulator/docker-compose.yml b/vms/client/simulator/docker-compose.yml index b9e08bb..68b148a 100644 --- a/vms/client/simulator/docker-compose.yml +++ b/vms/client/simulator/docker-compose.yml @@ -1,24 +1,90 @@ -version: "3" - services: - temp_sensor: - image: antonaleks/data-simulator + temperature_room: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always + environment: + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: temperature + SENSOR_NAME: temperature_sensor_1 + PUBLISH_INTERVAL: 3 + FORMULA_TYPE: sine + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} + + pressure_room: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always + environment: + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: pressure + SENSOR_NAME: pressure_sensor_1 + PUBLISH_INTERVAL: 3 + FORMULA_TYPE: random + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} + + humidity_room: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=TIRCAHL24 - - SIM_PERIOD=5 - - SIM_TYPE=temperature - pressure_sensor: - image: antonaleks/data-simulator + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: humidity + SENSOR_NAME: humidity_sensor_1 + PUBLISH_INTERVAL: 3 + FORMULA_TYPE: trend + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} + + current_motor: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=PIRCAHL11 - - SIM_PERIOD=10 - - SIM_TYPE=pressure - current_sensor: - image: antonaleks/data-simulator + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: current + SENSOR_NAME: current_sensor_1 + PUBLISH_INTERVAL: 5 + FORMULA_TYPE: sine + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} + + pressure_outside: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always + environment: + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: pressure + SENSOR_NAME: pressure_sensor_2 + PUBLISH_INTERVAL: 7 + FORMULA_TYPE: random + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} + + temperature_outside: + image: ${DOCKERHUB_USERNAME}/sensor-simulator:latest + restart: always environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=A0_CURRENT - - SIM_PERIOD=1 - - SIM_TYPE=current + MQTT_BROKER_HOST: ${MQTT_BROKER_HOST} + MQTT_BROKER_PORT: ${MQTT_BROKER_PORT} + SENSOR_TYPE: temperature + SENSOR_NAME: temperature_sensor_2 + PUBLISH_INTERVAL: 4 + FORMULA_TYPE: birthday + TOPIC_MODE: json + BIRTH_DAY: ${BIRTH_DAY} + BIRTH_MONTH: ${BIRTH_MONTH} + BIRTH_YEAR: ${BIRTH_YEAR} diff --git a/vms/client/simulator/requirements.txt b/vms/client/simulator/requirements.txt index 13e9d8ea30364ec90e0c4a0703596ba17a8f9032..a1dcd7b45294762683591a959e377519f4d841ee 100644 GIT binary patch literal 38 ocmezWuYe(uA%h{GL6;$yp^%{j2yKDTkU@{Z42TUGcp11D0Kno09smFU literal 17 YcmXR&%*c<=Ei5UqwKdc;(=+4(062~XMgRZ+ diff --git a/vms/gateway/docker-compose.yml b/vms/gateway/docker-compose.yml new file mode 100644 index 0000000..dc1414f --- /dev/null +++ b/vms/gateway/docker-compose.yml @@ -0,0 +1,9 @@ +services: + broker: + image: eclipse-mosquitto + container_name: broker + restart: always + ports: + - "1883:1883" + volumes: + - ./mosquitto/config:/mosquitto/config \ No newline at end of file diff --git a/vms/gateway/mosquitto/config/mosquitto.conf b/vms/gateway/mosquitto/config/mosquitto.conf new file mode 100644 index 0000000..542f207 --- /dev/null +++ b/vms/gateway/mosquitto/config/mosquitto.conf @@ -0,0 +1,14 @@ +# слушаем порт на 1883 +listener 1883 + +# разрешаем подключение без логина и пароля +allow_anonymous true + +# сохраняем данные брокера +persistence true + +# папка, где храним данные +persistence_location /mosquitto/data + +# пишем в лог файл +log_dest file /mosquitto/log/mosquitto.log diff --git a/vms/server/docker-compose.yml b/vms/server/docker-compose.yml new file mode 100644 index 0000000..ded1eef --- /dev/null +++ b/vms/server/docker-compose.yml @@ -0,0 +1,44 @@ +services: + influxdb: + image: influxdb:1.8 + container_name: influxdb + restart: always + ports: + - "8086:8086" + volumes: + - influx:/var/lib/influxdb + networks: + - monitoring + + telegraf: + image: telegraf + container_name: telegraf + restart: always + depends_on: + - influxdb + volumes: + - ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro + networks: + - monitoring + + grafana: + image: grafana/grafana:10.4.2 + container_name: grafana + restart: always + depends_on: + - influxdb + ports: + - "3000:3000" + volumes: + - grafana-data:/var/lib/grafana + - ./grafana/provisioning:/etc/grafana/provisioning + networks: + - monitoring + +volumes: + influx: + grafana-data: + +networks: + monitoring: + driver: bridge \ No newline at end of file diff --git a/vms/server/grafana/provisioning/dashboards/Docker Practice-1774662825893.json b/vms/server/grafana/provisioning/dashboards/Docker Practice-1774662825893.json new file mode 100644 index 0000000..af89c32 --- /dev/null +++ b/vms/server/grafana/provisioning/dashboards/Docker Practice-1774662825893.json @@ -0,0 +1,444 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "links": [], + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "ffhblp4fmap6oc" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "celsius" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 4, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.2", + "targets": [ + { + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + }, + { + "params": [ + "null" + ], + "type": "fill" + } + ], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [ + { + "key": "sensor_type::tag", + "operator": "=", + "value": "temperature" + }, + { + "condition": "AND", + "key": "name::tag", + "operator": "=", + "value": "temperature_sensor_1" + } + ] + } + ], + "title": "Temperature", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ffhblp4fmap6oc" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "max": 100, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-blue", + "value": 0 + }, + { + "color": "semi-dark-blue", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 1, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.2", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "ffhblp4fmap6oc" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [ + { + "key": "sensor_type::tag", + "operator": "=", + "value": "humidity" + }, + { + "condition": "AND", + "key": "name::tag", + "operator": "=", + "value": "humidity_sensor_1" + }, + { + "condition": "AND", + "key": "topic::tag", + "operator": "=", + "value": "sensors/humidity" + } + ] + } + ], + "title": "Humidity", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ffhblp4fmap6oc" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-red", + "value": 0 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "amp" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 3, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.2", + "targets": [ + { + "groupBy": [ + { + "params": [ + "$__interval" + ], + "type": "time" + } + ], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [ + { + "key": "sensor_type::tag", + "operator": "=", + "value": "current" + }, + { + "condition": "AND", + "key": "topic::tag", + "operator": "=", + "value": "sensors/current" + } + ] + } + ], + "title": "Current", + "type": "gauge" + }, + { + "datasource": { + "type": "influxdb", + "uid": "ffhblp4fmap6oc" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "super-light-yellow", + "value": 0 + }, + { + "color": "yellow", + "value": 80 + } + ] + }, + "unit": "pressurekpa" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 2, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "sizing": "auto" + }, + "pluginVersion": "12.4.2", + "targets": [ + { + "groupBy": [ + { + "params": [ + "$interval" + ], + "type": "time" + } + ], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + }, + { + "params": [], + "type": "last" + } + ] + ], + "tags": [ + { + "key": "sensor_type::tag", + "operator": "=", + "value": "pressure" + }, + { + "condition": "AND", + "key": "name::tag", + "operator": "=", + "value": "pressure_sensor_1" + } + ] + } + ], + "title": "Pressure", + "type": "gauge" + } + ], + "preload": false, + "refresh": "5s", + "schemaVersion": 42, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-5m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "Docker Practice", + "uid": "add6psk", + "version": 14, + "weekStart": "" +} \ No newline at end of file diff --git a/vms/server/grafana/provisioning/dashboards/default.yaml b/vms/server/grafana/provisioning/dashboards/default.yaml new file mode 100644 index 0000000..e406067 --- /dev/null +++ b/vms/server/grafana/provisioning/dashboards/default.yaml @@ -0,0 +1,12 @@ +apiVersion: 1 + +providers: + - name: 'mqtt' + orgId: 1 + folder: '' + type: file + disableDeletion: false + editable: true + allowUiUpdates: true + options: + path: /etc/grafana/provisioning/dashboards \ No newline at end of file diff --git a/vms/server/grafana/provisioning/datasources/default.yaml b/vms/server/grafana/provisioning/datasources/default.yaml new file mode 100644 index 0000000..d4e29dd --- /dev/null +++ b/vms/server/grafana/provisioning/datasources/default.yaml @@ -0,0 +1,13 @@ +apiVersion: 1 + +datasources: + - name: InfluxDB_v1 + type: influxdb + access: proxy + database: sensors + user: telegraf + url: http://influxdb:8086 + jsonData: + httpMode: GET + secureJsonData: + password: telegraf \ No newline at end of file diff --git a/vms/server/telegraf/telegraf.conf b/vms/server/telegraf/telegraf.conf new file mode 100644 index 0000000..de46610 --- /dev/null +++ b/vms/server/telegraf/telegraf.conf @@ -0,0 +1,14990 @@ +# Telegraf Configuration +# +# Telegraf is entirely plugin driven. All metrics are gathered from the +# declared inputs, and sent to the declared outputs. +# +# Plugins must be declared in here to be active. +# To deactivate a plugin, comment out the name and any variables. +# +# Use 'telegraf -config telegraf.conf -test' to see what metrics a config +# file would generate. +# +# Environment variables can be used anywhere in this config file, simply surround +# them with ${}. For strings the variable must be within quotes (ie, "${STR_VAR}"), +# for numbers and booleans they should be plain (ie, ${INT_VAR}, ${BOOL_VAR}) + + +# Global tags can be specified here in key="value" format. +[global_tags] + # dc = "us-east-1" # will tag all metrics with dc=us-east-1 + # rack = "1a" + ## Environment variables can be used as tags, and throughout the config file + # user = "$USER" + +# Configuration for telegraf agent +[agent] + ## Default data collection interval for all inputs + interval = "10s" + ## Rounds collection interval to 'interval' + ## ie, if interval="10s" then always collect on :00, :10, :20, etc. + round_interval = true + + ## Telegraf will send metrics to outputs in batches of at most + ## metric_batch_size metrics. + ## This controls the size of writes that Telegraf sends to output plugins. + metric_batch_size = 1000 + + ## Maximum number of unwritten metrics per output. Increasing this value + ## allows for longer periods of output downtime without dropping metrics at the + ## cost of higher maximum memory usage. + metric_buffer_limit = 10000 + + ## Collection jitter is used to jitter the collection by a random amount. + ## Each plugin will sleep for a random time within jitter before collecting. + ## This can be used to avoid many plugins querying things like sysfs at the + ## same time, which can have a measurable effect on the system. + collection_jitter = "0s" + + ## Collection offset is used to shift the collection by the given amount. + ## This can be be used to avoid many plugins querying constraint devices + ## at the same time by manually scheduling them in time. + # collection_offset = "0s" + + ## Default flushing interval for all outputs. Maximum flush_interval will be + ## flush_interval + flush_jitter + flush_interval = "10s" + ## Jitter the flush interval by a random amount. This is primarily to avoid + ## large write spikes for users running a large number of telegraf instances. + ## ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s + flush_jitter = "0s" + + ## Collected metrics are rounded to the precision specified. Precision is + ## specified as an interval with an integer + unit (e.g. 0s, 10ms, 2us, 4s). + ## Valid time units are "ns", "us" (or "µs"), "ms", "s". + ## + ## By default or when set to "0s", precision will be set to the same + ## timestamp order as the collection interval, with the maximum being 1s: + ## ie, when interval = "10s", precision will be "1s" + ## when interval = "250ms", precision will be "1ms" + ## + ## Precision will NOT be used for service inputs. It is up to each individual + ## service input to set the timestamp at the appropriate precision. + precision = "0s" + + ## Log at debug level. + # debug = false + ## Log only error level messages. + # quiet = false + + ## Log format controls the way messages are logged and can be one of "text", + ## "structured" or, on Windows, "eventlog". + # logformat = "text" + + ## Message key for structured logs, to override the default of "msg". + ## Ignored if `logformat` is not "structured". + # structured_log_message_key = "message" + + ## Name of the file to be logged to or stderr if unset or empty. This + ## setting is ignored for the "eventlog" format. + # logfile = "" + + ## The logfile will be rotated after the time interval specified. When set + ## to 0 no time based rotation is performed. Logs are rotated only when + ## written to, if there is no log activity rotation may be delayed. + # logfile_rotation_interval = "0h" + + ## The logfile will be rotated when it becomes larger than the specified + ## size. When set to 0 no size based rotation is performed. + # logfile_rotation_max_size = "0MB" + + ## Maximum number of rotated archives to keep, any older logs are deleted. + ## If set to -1, no archives are removed. + # logfile_rotation_max_archives = 5 + + ## Pick a timezone to use when logging or type 'local' for local time. + ## Example: America/Chicago + # log_with_timezone = "" + + ## Override default hostname, if empty use os.Hostname() + # hostname = "" + ## If set to true, do no set the "host" tag in the telegraf agent. + # omit_hostname = false + + ## Method of translating SNMP objects. Can be "netsnmp" (deprecated) which + ## translates by calling external programs snmptranslate and snmptable, + ## or "gosmi" which translates using the built-in gosmi library. + # snmp_translator = "netsnmp" + + ## Name of the file to load the state of plugins from and store the state to. + ## If uncommented and not empty, this file will be used to save the state of + ## stateful plugins on termination of Telegraf. If the file exists on start, + ## the state in the file will be restored for the plugins. + # statefile = "" + + ## Flag to skip running processors after aggregators + ## By default, processors are run a second time after aggregators. Changing + ## this setting to true will skip the second run of processors. + # skip_processors_after_aggregators = false + +############################################################################### +# SECRETSTORE PLUGINS # +############################################################################### + + +# # Secret-store to access Docker Secrets +# [[secretstores.docker]] +# ## Unique identifier for the secretstore. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "docker_secretstore" +# +# ## Default Path to directory where docker stores the secrets file +# ## Current implementation in docker compose v2 only allows the following +# ## value for the path where the secrets are mounted at runtime +# # path = "/run/secrets" +# +# ## Allow dynamic secrets that are updated during runtime of telegraf +# ## Dynamic Secrets work only with `file` or `external` configuration +# ## in `secrets` section of the `docker-compose.yml` file +# # dynamic = false + + +# ## Fetch tokens from Google Cloud Authentication +# [[secretstores.googlecloud]] +# ## Unique identifier for the secret-store. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:token}(mandatory) +# id = "googlecloud_secret" +# +# ## Path to the service account credentials file +# credentials_file = "./testdata/gdch.json" +# +# ## Audience sent to when retrieving an STS token. +# ## Currently only used for GDCH auth flow +# sts_audience = "https://{AUDIENCE_URL}" + + +# # Read secrets from a HTTP endpoint +# [[secretstores.http]] +# ## Unique identifier for the secret-store. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "secretstore" +# +# ## URLs from which to read the secrets +# url = "http://localhost/secrets" +# +# ## Optional HTTP headers +# # headers = {"X-Special-Header" = "Special-Value"} +# +# ## Optional Token for Bearer Authentication via +# ## "Authorization: Bearer " header +# # token = "your-token" +# +# ## Optional Credentials for HTTP Basic Authentication +# # username = "username" +# # password = "pa$$word" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## OAuth2 Client Credentials. The options 'client_id', 'client_secret', and 'token_url' are required to use OAuth2. +# # client_id = "clientid" +# # client_secret = "secret" +# # token_url = "https://indentityprovider/oauth2/v1/token" +# # audience = "" +# # scopes = ["urn:opc:idm:__myscopes__"] +# +# ## Optional Cookie authentication +# # cookie_auth_url = "https://localhost/authMe" +# # cookie_auth_method = "POST" +# # cookie_auth_username = "username" +# # cookie_auth_password = "pa$$word" +# # cookie_auth_headers = { Content-Type = "application/json", X-MY-HEADER = "hello" } +# # cookie_auth_body = '{"username": "user", "password": "pa$$word", "authenticate": "me"}' +# ## cookie_auth_renewal not set or set to "0" will auth once and never renew the cookie +# # cookie_auth_renewal = "0s" +# +# ## List of success status codes +# # success_status_codes = [200] +# +# ## JSONata expression to transform the server response into a +# ## { "secret name": "secret value", ... } +# ## form. See https://jsonata.org for more information and a playground. +# # transformation = '' +# +# ## Cipher used to decrypt the secrets. +# ## In case your secrets are transmitted in an encrypted form, you need +# ## to specify the cipher used and provide the corresponding configuration. +# ## Please refer to https://github.com/influxdata/telegraf/blob/master/plugins/secretstores/http/README.md +# ## for supported values. +# # cipher = "none" +# +# ## AES cipher parameters +# # [secretstores.http.aes] +# # ## Key (hex-encoded) and initialization-vector (IV) for the decryption. +# # ## In case the key (and IV) is derived from a password, the values can +# # ## be omitted. +# # key = "" +# # init_vector = "" +# # +# # ## Parameters for password-based-key derivation. +# # ## These parameters must match the encryption side to derive the same +# # ## key on both sides! +# # # kdf_algorithm = "PBKDF2-HMAC-SHA256" +# # # password = "" +# # # salt = "" +# # # iterations = 0 + + +# # File based Javascript Object Signing and Encryption based secret-store +# [[secretstores.jose]] +# ## Unique identifier for the secret-store. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "secretstore" +# +# ## Directory for storing the secrets +# path = "/etc/telegraf/secrets" +# +# ## Password to access the secrets. +# ## If no password is specified here, Telegraf will prompt for it at startup time. +# # password = "" + + +# # Secret-store to retrieve and maintain tokens from various OAuth2 services +# [[secretstores.oauth2]] +# ## Unique identifier for the secret-store. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "secretstore" +# +# ## Service to retrieve the token(s) from +# ## Currently supported services are "custom", "auth0" and "AzureAD" +# # service = "custom" +# +# ## Setting to overwrite the queried token-endpoint +# ## This setting is optional for some services but mandatory for others such +# ## as "custom" or "auth0". Please check the documentation at +# ## https://github.com/influxdata/telegraf/blob/master/plugins/secretstores/oauth2/README.md +# # token_endpoint = "" +# +# ## Tenant ID for the AzureAD service +# # tenant_id = "" +# +# ## Minimal remaining time until the token expires +# ## If a token expires less than the set duration in the future, the token is +# ## renewed. This is useful to avoid race-condition issues where a token is +# ## still valid, but isn't when the request reaches the API endpoint of +# ## your service using the token. +# # token_expiry_margin = "1s" +# +# ## Section for defining a token secret +# [[secretstores.oauth2.token]] +# ## Unique secret-key used for referencing the token via @{:} +# key = "" +# ## Client-ID and secret for the 2-legged OAuth flow +# client_id = "" +# client_secret = "" +# ## Scopes to send in the request +# # scopes = [] +# +# ## Additional (optional) parameters to include in the token request +# ## This might for example include the "audience" parameter required for +# ## auth0. +# # [secretstores.oauth2.token.parameters] +# # audience = "" + + +# # Operating System native secret-store +# [[secretstores.os]] +# ## Unique identifier for the secret-store. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "secretstore" +# +# ## Keyring Name & Collection +# ## * Linux: keyring name used for the secrets, collection is unused +# ## * macOS: keyring specifies the macOS' Keychain name and collection is an +# ## optional Keychain service name +# ## * Windows: keys follow a fixed pattern in the form +# ## `::`. Please keep this in mind when +# ## creating secrets with the Windows credential tool. +# # keyring = "telegraf" +# # collection = "" +# +# ## macOS Keychain password +# ## If no password is specified here, Telegraf will prompt for it at startup +# ## time. +# # password = "" +# +# ## Allow dynamic secrets that are updated during runtime of telegraf +# # dynamic = false + + +# # Secret-store to access systemd secrets +# [[secretstores.systemd]] +# ## Unique identifier for the secretstore. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "systemd" +# +# ## Path to systemd credentials directory +# ## This should not be required as systemd indicates this directory +# ## via the CREDENTIALS_DIRECTORY environment variable. +# # path = "${CREDENTIALS_DIRECTORY}" +# +# ## Prefix to remove from systemd credential-filenames to derive secret names +# # prefix = "telegraf." +# + + +# # Secret-store to access Vault Secrets +# [[secretstores.vault]] +# ## Unique identifier for the secretstore. +# ## This id can later be used in plugins to reference the secrets +# ## in this secret-store via @{:} (mandatory) +# id = "vault_secretstore" +# +# ## Address of the Vault server +# address = "localhost:8200" +# +# ## Mount path of the KV secrets engine. +# ## This is the path where the KV secrets engine is enabled. For example, if +# ## your full secret path in the Vault CLI is "secret/data/myapp/database", +# ## then mount_path = "secret". +# mount_path = "" +# +# ## Path to the secret within the KV secrets engine. +# ## This is the path to your specific secret under the mount point. For example, +# ## if your full secret path is "secret/data/myapp/database", then +# ## secret_path = "myapp/database". Note that the "/data/" segment in KV v2 +# ## paths is handled automatically and should not be included. +# secret_path = "" +# +# ## Secret store engine to use. +# ## Supports 'kv-v1' and 'kv-v2' engines. +# ## By default will use the kv-v2 engine. +# # engine = "kv-v2" +# +# [secretstores.vault.approle] +# ## The Role ID for AppRole Authentication, a UUID string +# role_id = "" +# +# ## Whether the Secret ID is configured to be response wrapped or not +# # response_wrapped = false +# +# ## The Secret ID for AppRole Authentication +# secret = "" + + +############################################################################### +# OUTPUT PLUGINS # +############################################################################### + + +# # Configuration for sending metrics to InfluxDB 2.x +# [[outputs.influxdb_v2]] +# ## The URLs of the InfluxDB cluster nodes. +# ## +# ## Multiple URLs can be specified for a single cluster, only ONE of the +# ## urls will be written to each interval. +# ## ex: urls = ["https://us-west-2-1.aws.cloud2.influxdata.com"] +# urls = ["http://127.0.0.1:8086"] +# +# ## Local address to bind when connecting to the server +# ## If empty or not set, the local address is automatically chosen. +# # local_address = "" +# +# ## Token for authentication. +# token = "" +# +# ## Organization is the name of the organization you wish to write to. +# organization = "" +# +# ## Destination bucket to write into. +# bucket = "" +# +# ## The value of this tag will be used to determine the bucket. If this +# ## tag is not set the 'bucket' option is used as the default. +# # bucket_tag = "" +# +# ## If true, the bucket tag will not be added to the metric. +# # exclude_bucket_tag = false +# +# ## Timeout for HTTP messages. +# # timeout = "5s" +# +# ## Additional HTTP headers +# # http_headers = {"X-Special-Header" = "Special-Value"} +# +# ## HTTP Proxy override, if unset values the standard proxy environment +# ## variables are consulted to determine which proxy, if any, should be used. +# # http_proxy = "http://corporate.proxy:3128" +# +# ## HTTP User-Agent +# # user_agent = "telegraf" +# +# ## Content-Encoding for write request body, can be set to "gzip" to +# ## compress body or "identity" to apply no encoding. +# # content_encoding = "gzip" +# +# ## Enable or disable uint support for writing uints influxdb 2.0. +# # influx_uint_support = false +# +# ## When true, Telegraf will omit the timestamp on data to allow InfluxDB +# ## to set the timestamp of the data during ingestion. This is generally NOT +# ## what you want as it can lead to data points captured at different times +# ## getting omitted due to similar data. +# # influx_omit_timestamp = false +# +# ## HTTP/2 Timeouts +# ## The following values control the HTTP/2 client's timeouts. These settings +# ## are generally not required unless a user is seeing issues with client +# ## disconnects. If a user does see issues, then it is suggested to set these +# ## values to "15s" for ping timeout and "30s" for read idle timeout and +# ## retry. +# ## +# ## Note that the timer for read_idle_timeout begins at the end of the last +# ## successful write and not at the beginning of the next write. +# # ping_timeout = "0s" +# # read_idle_timeout = "0s" +# +# ## Optional TLS Config for use on HTTP connections. +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Rate limits for sending data (disabled by default) +# ## Available, uncompressed payload size e.g. "5MB" +# # rate_limit = "unlimited" +# ## Fixed time-window for the available payload size e.g. "5m" +# # rate_limit_period = "0s" +# +# ## Number of concurrent writes to the output +# ## When set to one sequential sending is used (default). +# ## NOTE: When using two or more concurrent writes the sending order of +# ## metrics is not guaranteed! +# # concurrent_writes = 1 + + +# ## DEPRECATED: The "amon" plugin is deprecated in version 1.37.0 and will be removed in 1.40.0, service doesn't exist anymore and platform code is unmaintained. +# # Configuration for Amon Server to send metrics to. +# [[outputs.amon]] +# ## Amon Server Key +# server_key = "my-server-key" # required. +# +# ## Amon Instance URL +# amon_instance = "https://youramoninstance" # required +# +# ## Connection timeout. +# # timeout = "5s" + + +# # Publishes metrics to an AMQP broker +# [[outputs.amqp]] +# ## Brokers to publish to. If multiple brokers are specified a random broker +# ## will be selected anytime a connection is established. This can be +# ## helpful for load balancing when not using a dedicated load balancer. +# brokers = ["amqp://localhost:5672/influxdb"] +# +# ## Maximum messages to send over a connection. Once this is reached, the +# ## connection is closed and a new connection is made. This can be helpful for +# ## load balancing when not using a dedicated load balancer. +# # max_messages = 0 +# +# ## Exchange to declare and publish to. +# exchange = "telegraf" +# +# ## Exchange type; common types are "direct", "fanout", "topic", "header", "x-consistent-hash". +# # exchange_type = "topic" +# +# ## If true, exchange will be passively declared. +# # exchange_passive = false +# +# ## Exchange durability can be either "transient" or "durable". +# # exchange_durability = "durable" +# +# ## Additional exchange arguments. +# # exchange_arguments = { } +# # exchange_arguments = {"hash_property" = "timestamp"} +# +# ## Authentication credentials for the PLAIN auth_method. +# # username = "" +# # password = "" +# +# ## Auth method. PLAIN and EXTERNAL are supported +# ## Using EXTERNAL requires enabling the rabbitmq_auth_mechanism_ssl plugin as +# ## described here: https://www.rabbitmq.com/plugins.html +# # auth_method = "PLAIN" +# +# ## Metric tag to use as a routing key. +# ## ie, if this tag exists, its value will be used as the routing key +# # routing_tag = "host" +# +# ## Static routing key. Used when no routing_tag is set or as a fallback +# ## when the tag specified in routing tag is not found. +# # routing_key = "" +# # routing_key = "telegraf" +# +# ## Delivery Mode controls if a published message is persistent. +# ## One of "transient" or "persistent". +# # delivery_mode = "transient" +# +# ## Static headers added to each published message. +# # headers = { } +# # headers = {"database" = "telegraf", "retention_policy" = "default"} +# +# ## Connection timeout. If not provided, will default to 5s. 0s means no +# ## timeout (not recommended). +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Optional Proxy Configuration +# # use_proxy = false +# # proxy_url = "localhost:8888" +# +# ## If true use batch serialization format instead of line based delimiting. +# ## Only applies to data formats which are not line based such as JSON. +# ## Recommended to set to true. +# # use_batch_format = false +# +# ## Content encoding for message payloads, can be set to "gzip" to or +# ## "identity" to apply no encoding. +# ## +# ## Please note that when use_batch_format = false each amqp message contains only +# ## a single metric, it is recommended to use compression with batch format +# ## for best results. +# # content_encoding = "identity" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" + + +# # Send metrics to Azure Application Insights +# [[outputs.application_insights]] +# ## Instrumentation key of the Application Insights resource. +# instrumentation_key = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx" +# +# ## Regions that require endpoint modification https://docs.microsoft.com/en-us/azure/azure-monitor/app/custom-endpoints +# # endpoint_url = "https://dc.services.visualstudio.com/v2/track" +# +# ## Timeout for closing (default: 5s). +# # timeout = "5s" +# +# ## Enable additional diagnostic logging. +# # enable_diagnostic_logging = false +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Context Tag Sources add Application Insights context tags to a tag value. +# ## +# ## For list of allowed context tag keys see: +# ## https://github.com/microsoft/ApplicationInsights-Go/blob/master/appinsights/contracts/contexttagkeys.go +# # [outputs.application_insights.context_tag_sources] +# # "ai.cloud.role" = "kubernetes_container_name" +# # "ai.cloud.roleInstance" = "kubernetes_pod_name" + + +# # Arc Time-Series Database Output Plugin +# [[outputs.arc]] +# ## Arc MessagePack API URL +# url = "http://localhost:8000/api/v1/write/msgpack" +# +# ## API Key for authentication (required, auth is enabled by default) +# api_key = "" +# +# ## Database name for multi-database architecture +# ## Defaults to the server configured DB if not specified or empty +# # database = "" +# +# ## Content encoding for request body +# ## Options: "gzip" (default), "identity" +# # content_encoding = "gzip" +# +# ## Timeout for HTTP writes +# # timeout = "5s" +# +# ## Additional HTTP headers +# # [outputs.arc.headers] +# # X-Custom-Header = "custom-value" + + +# # Sends metrics to Azure Data Explorer +# [[outputs.azure_data_explorer]] +# ## The URI property of the Azure Data Explorer resource on Azure +# ## ex: endpoint_url = https://myadxresource.australiasoutheast.kusto.windows.net +# endpoint_url = "" +# +# ## The Azure Data Explorer database that the metrics will be ingested into. +# ## The plugin will NOT generate this database automatically, it's expected that this database already exists before ingestion. +# ## ex: "exampledatabase" +# database = "" +# +# ## Timeout for Azure Data Explorer operations +# # timeout = "20s" +# +# ## Type of metrics grouping used when pushing to Azure Data Explorer. +# ## Default is "TablePerMetric" for one table per different metric. +# ## For more information, please check the plugin README. +# # metrics_grouping_type = "TablePerMetric" +# +# ## Name of the single table to store all the metrics (Only needed if metrics_grouping_type is "SingleTable"). +# # table_name = "" +# +# ## Creates tables and relevant mapping if set to true(default). +# ## Skips table and mapping creation if set to false, this is useful for running Telegraf with the lowest possible permissions (table ingestor role). +# # create_tables = true +# +# ## Ingestion method to use. +# ## Available options are +# ## - managed -- streaming ingestion with fallback to batched ingestion or the "queued" method below +# ## - queued -- queue up metrics data and process sequentially +# # ingestion_type = "queued" + + +# # Send aggregate metrics to Azure Monitor +# [[outputs.azure_monitor]] +# ## Timeout for HTTP writes. +# # timeout = "20s" +# +# ## Set the namespace prefix, defaults to "Telegraf/". +# # namespace_prefix = "Telegraf/" +# +# ## Azure Monitor doesn't have a string value type, so convert string +# ## fields to dimensions (a.k.a. tags) if enabled. Azure Monitor allows +# ## a maximum of 10 dimensions so Telegraf will only send the first 10 +# ## alphanumeric dimensions. +# # strings_as_dimensions = false +# +# ## Both region and resource_id must be set or be available via the +# ## Instance Metadata service on Azure Virtual Machines. +# # +# ## Azure Region to publish metrics against. +# ## ex: region = "southcentralus" +# # region = "" +# # +# ## The Azure Resource ID against which metric will be logged, e.g. +# ## ex: resource_id = "/subscriptions//resourceGroups//providers/Microsoft.Compute/virtualMachines/" +# # resource_id = "" +# +# ## Optionally, if in Azure US Government, China, or other sovereign +# ## cloud environment, set the appropriate REST endpoint for receiving +# ## metrics. (Note: region may be unused in this context) +# # endpoint_url = "https://monitoring.core.usgovcloudapi.net" +# +# ## Time limitations of metric to send +# ## Documentation can be found here: +# ## https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/metrics-store-custom-rest-api?tabs=rest#timestamp +# ## However, the returned (400) error message might document more strict or +# ## relaxed settings. By default, only past metrics witin the limit are sent. +# # timestamp_limit_past = "30m" + + +# # Configuration for Google Cloud BigQuery to send entries +# [[outputs.bigquery]] +# ## Credentials File +# credentials_file = "/path/to/service/account/key.json" +# +# ## Google Cloud Platform Project +# # project = "" +# +# ## The namespace for the metric descriptor +# dataset = "telegraf" +# +# ## Timeout for BigQuery operations. +# # timeout = "5s" +# +# ## Character to replace hyphens on Metric name +# # replace_hyphen_to = "_" +# +# ## Write all metrics in a single compact table +# # compact_table = "" + + +# ## Configuration to publish Telegraf metrics to Clarify +# [[outputs.clarify]] +# ## Credentials File (Oauth 2.0 from Clarify integration) +# credentials_file = "/path/to/clarify/credentials.json" +# +# ## Clarify username password (Basic Auth from Clarify integration) +# username = "i-am-bob" +# password = "secret-password" +# +# ## Timeout for Clarify operations +# # timeout = "20s" +# +# ## Optional tags to be included when generating the unique ID for a signal in Clarify +# # id_tags = [] +# # clarify_id_tag = 'clarify_input_id' + + +# # Publish Telegraf metrics to a Google Cloud PubSub topic +# [[outputs.cloud_pubsub]] +# ## Required. Name of Google Cloud Platform (GCP) Project that owns +# ## the given PubSub topic. +# project = "my-project" +# +# ## Required. Name of PubSub topic to publish metrics to. +# topic = "my-topic" +# +# ## Content encoding for message payloads, can be set to "gzip" or +# ## "identity" to apply no encoding. +# # content_encoding = "identity" +# +# ## Required. Data format to consume. +# ## Each data format has its own unique set of configuration options. +# ## Read more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Optional. Filepath for GCP credentials JSON file to authorize calls to +# ## PubSub APIs. If not set explicitly, Telegraf will attempt to use +# ## Application Default Credentials, which is preferred. +# # credentials_file = "path/to/my/creds.json" +# +# ## Optional. If true, will send all metrics per write in one PubSub message. +# # send_batched = true +# +# ## The following publish_* parameters specifically configures batching +# ## requests made to the GCP Cloud PubSub API via the PubSub Golang library. Read +# ## more here: https://godoc.org/cloud.google.com/go/pubsub/v2#PublishSettings +# +# ## Optional. Send a request to PubSub (actually publish a batch) +# ## when it has this many PubSub messages. If send_batched is true, +# ## this is ignored and treated as if it were 1. +# # publish_count_threshold = 1000 +# +# ## Optional. Send a request to PubSub (actually publish a batch) +# ## when it has this many PubSub messages. If send_batched is true, +# ## this is ignored and treated as if it were 1 +# # publish_byte_threshold = 1000000 +# +# ## Optional. Specifically configures requests made to the PubSub API. +# # publish_num_go_routines = 2 +# +# ## Optional. Specifies a timeout for requests to the PubSub API. +# # publish_timeout = "30s" +# +# ## Optional. If true, published PubSub message data will be base64-encoded. +# # base64_data = false +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Optional. PubSub attributes to add to metrics. +# # [outputs.cloud_pubsub.attributes] +# # my_attr = "tag_value" + + +# # Configuration for AWS CloudWatch output. +# [[outputs.cloudwatch]] +# ## Amazon REGION +# region = "us-east-1" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and +# ## web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# #access_key = "" +# #secret_key = "" +# #token = "" +# #role_arn = "" +# #web_identity_token_file = "" +# #role_session_name = "" +# #profile = "" +# #shared_credential_file = "" +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default. +# ## ex: endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Set http_proxy +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## Namespace for the CloudWatch MetricDatums +# namespace = "InfluxData/Telegraf" +# +# ## If you have a large amount of metrics, you should consider to send +# ## statistic values instead of raw metrics which could not only improve +# ## performance but also save AWS API cost. If enable this flag, this plugin +# ## would parse the required CloudWatch statistic fields (count, min, max, and +# ## sum) and send them to CloudWatch. You could use basicstats aggregator to +# ## calculate those fields. If not all statistic fields are available, all +# ## fields would still be sent as raw metrics. +# # write_statistics = false +# +# ## Enable high resolution metrics of 1 second (if not enabled, standard +# ## resolution are of 60 seconds precision) +# # high_resolution_metrics = false + + +# # Configuration for AWS CloudWatchLogs output. +# [[outputs.cloudwatch_logs]] +# ## The region is the Amazon region that you wish to connect to. +# ## Examples include but are not limited to: +# ## - us-west-1 +# ## - us-west-2 +# ## - us-east-1 +# ## - ap-southeast-1 +# ## - ap-southeast-2 +# ## ... +# region = "us-east-1" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and +# ## web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# #access_key = "" +# #secret_key = "" +# #token = "" +# #role_arn = "" +# #web_identity_token_file = "" +# #role_session_name = "" +# #profile = "" +# #shared_credential_file = "" +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default, e.g endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Cloud watch log group. Must be created in AWS cloudwatch logs upfront! +# ## For example, you can specify the name of the k8s cluster here to group logs +# ## from all cluster in oine place +# log_group = "my-group-name" +# +# ## Log stream in log group +# ## Either log group name or reference to metric attribute, from which it can +# ## be parsed, tag: or field:. If the log stream is not +# ## exist, it will be created. Since AWS is not automatically delete logs +# ## streams with expired logs entries (empty log streams), you need to put +# ## in place appropriate house-keeping (https://forums.aws.amazon.com/thread.jspa?threadID=178855) +# log_stream = "tag:location" +# +# ## Source of log data - metric name +# ## specify the name of the metric, from which the log data should be +# ## retrieved. I.e., if you are using docker_log plugin to stream logs from +# ## container, then specify log_data_metric_name = "docker_log" +# log_data_metric_name = "docker_log" +# +# ## Specify from which metric attribute the log data should be retrieved: +# ## tag: or field:. +# ## I.e., if you are using docker_log plugin to stream logs from container, +# ## then specify log_data_source = "field:message" +# log_data_source = "field:message" + + +# # Configuration for CrateDB to send metrics to. +# [[outputs.cratedb]] +# ## Connection parameters for accessing the database see +# ## https://pkg.go.dev/github.com/jackc/pgx/v4#ParseConfig +# ## for available options +# url = "postgres://user:password@localhost/schema?sslmode=disable" +# +# ## Timeout for all CrateDB queries. +# # timeout = "5s" +# +# ## Name of the table to store metrics in. +# # table = "metrics" +# +# ## If true, and the metrics table does not exist, create it automatically. +# # table_create = false +# +# ## The character(s) to replace any '.' in an object key with +# # key_separator = "_" + + +# # Configuration for DataDog API to send metrics to. +# [[outputs.datadog]] +# ## Datadog API key +# apikey = "my-secret-key" +# +# ## Connection timeout. +# # timeout = "5s" +# +# ## Write URL override; useful for debugging. +# ## This plugin only supports the v1 API currently due to the authentication +# ## method used. +# # url = "https://app.datadoghq.com/api/v1/series" +# +# ## Set http_proxy +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## Override the default (none) compression used to send data. +# ## Supports: "zlib", "none" +# # compression = "none" +# +# ## When non-zero, converts count metrics submitted by inputs.statsd +# ## into rate, while dividing the metric value by this number. +# ## Note that in order for metrics to be submitted simultaenously alongside +# ## a Datadog agent, rate_interval has to match the interval used by the +# ## agent - which defaults to 10s +# # rate_interval = 0s + + +# # Send metrics to nowhere at all +# [[outputs.discard]] +# # no configuration + + +# # Send telegraf metrics to a Dynatrace environment +# [[outputs.dynatrace]] +# ## For usage with the Dynatrace OneAgent you can omit any configuration, +# ## the only requirement is that the OneAgent is running on the same host. +# ## Only setup environment url and token if you want to monitor a Host without the OneAgent present. +# ## +# ## Your Dynatrace environment URL. +# ## For Dynatrace OneAgent you can leave this empty or set it to "http://127.0.0.1:14499/metrics/ingest" (default) +# ## For Dynatrace SaaS environments the URL scheme is "https://{your-environment-id}.live.dynatrace.com/api/v2/metrics/ingest" +# ## For Dynatrace Managed environments the URL scheme is "https://{your-domain}/e/{your-environment-id}/api/v2/metrics/ingest" +# url = "" +# +# ## Your Dynatrace API token. +# ## Create an API token within your Dynatrace environment, by navigating to Settings > Integration > Dynatrace API +# ## The API token needs data ingest scope permission. When using OneAgent, no API token is required. +# api_token = "" +# +# ## Optional prefix for metric names (e.g.: "telegraf") +# prefix = "telegraf" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Optional flag for ignoring tls certificate check +# # insecure_skip_verify = false +# +# ## Connection timeout, defaults to "5s" if not set. +# timeout = "5s" +# +# ## If you want metrics to be treated and reported as delta counters, add the metric names here +# additional_counters = [ ] +# +# ## In addition or as an alternative to additional_counters, if you want metrics to be treated and +# ## reported as delta counters using regular expression pattern matching +# additional_counters_patterns = [ ] +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Optional dimensions to be added to every metric +# # [outputs.dynatrace.default_dimensions] +# # default_key = "default value" + + +# # Configuration for Elasticsearch to send metrics to. +# [[outputs.elasticsearch]] +# ## The full HTTP endpoint URL for your Elasticsearch instance +# ## Multiple urls can be specified as part of the same cluster, +# ## this means that only ONE of the urls will be written to each interval +# urls = [ "http://node1.es.example.com:9200" ] # required. +# ## Elasticsearch client timeout, defaults to "5s" if not set. +# timeout = "5s" +# ## Set to true to ask Elasticsearch a list of all cluster nodes, +# ## thus it is not necessary to list all nodes in the urls config option +# enable_sniffer = false +# ## Set to true to enable gzip compression +# enable_gzip = false +# ## Set the interval to check if the Elasticsearch nodes are available +# ## Setting to "0s" will disable the health check (not recommended in production) +# health_check_interval = "10s" +# ## Set the timeout for periodic health checks. +# # health_check_timeout = "1s" +# ## HTTP basic authentication details. +# ## HTTP basic authentication details +# # username = "telegraf" +# # password = "mypassword" +# ## HTTP bearer token authentication details +# # auth_bearer_token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9" +# +# ## Index Config +# ## The target index for metrics (Elasticsearch will create if it not exists). +# ## You can use the date specifiers below to create indexes per time frame. +# ## The metric timestamp will be used to decide the destination index name +# # %Y - year (2016) +# # %y - last two digits of year (00..99) +# # %m - month (01..12) +# # %d - day of month (e.g., 01) +# # %H - hour (00..23) +# # %V - week of the year (ISO week) (01..53) +# ## Additionally, you can specify a tag name using the notation {{tag_name}} +# ## which will be used as part of the index name. If the tag does not exist, +# ## the default tag value will be used. +# # index_name = "telegraf-{{host}}-%Y.%m.%d" +# # default_tag_value = "none" +# index_name = "telegraf-%Y.%m.%d" # required. +# +# ## Optional Index Config +# ## Set to true if Telegraf should use the "create" OpType while indexing +# # use_optype_create = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Template Config +# ## Set to true if you want telegraf to manage its index template. +# ## If enabled it will create a recommended index template for telegraf indexes +# manage_template = true +# ## The template name used for telegraf indexes +# template_name = "telegraf" +# ## Set to true if you want telegraf to overwrite an existing template +# overwrite_template = false +# ## If set to true a unique ID hash will be sent as sha256(concat(timestamp,measurement,series-hash)) string +# ## it will enable data resend and update metric points avoiding duplicated metrics with different id's +# force_document_id = false +# +# ## Specifies the handling of NaN and Inf values. +# ## This option can have the following values: +# ## none -- do not modify field-values (default); will produce an error if NaNs or infs are encountered +# ## drop -- drop fields containing NaNs or infs +# ## replace -- replace with the value in "float_replacement_value" (default: 0.0) +# ## NaNs and inf will be replaced with the given number, -inf with the negative of that number +# # float_handling = "none" +# # float_replacement_value = 0.0 +# +# ## Pipeline Config +# ## To use a ingest pipeline, set this to the name of the pipeline you want to use. +# # use_pipeline = "my_pipeline" +# ## Additionally, you can specify a tag name using the notation {{tag_name}} +# ## which will be used as part of the pipeline name. If the tag does not exist, +# ## the default pipeline will be used as the pipeline. If no default pipeline is set, +# ## no pipeline is used for the metric. +# # use_pipeline = "{{es_pipeline}}" +# # default_pipeline = "my_pipeline" +# # +# ## Custom HTTP Headers +# ## To pass custom HTTP headers please define it in a given below section +# # [outputs.elasticsearch.headers] +# # "X-Custom-Header" = ["custom-value1", "custom-value2"] +# +# ## Template Index Settings +# ## Overrides the template settings.index section with any provided options. +# ## Defaults provided here in the config +# # template_index_settings = { +# # refresh_interval = "10s", +# # mapping.total_fields.limit = 5000, +# # auto_expand_replicas = "0-1", +# # codec = "best_compression" +# # } + + +# # Configuration for Event Hubs output plugin +# [[outputs.event_hubs]] +# ## Full connection string to the Event Hub instance. The shared access key +# ## must have "Send" permissions on the target Event Hub. +# connection_string = "Endpoint=sb://namespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=superSecret1234=;EntityPath=hubName" +# +# ## Partition key to use for the event +# ## Metric tag or field name to use for the event partition key. The value of +# ## this tag or field is set as the key for events if it exists. If both, tag +# ## and field, exist the tag is preferred. +# # partition_key = "" +# +# ## Set the maximum batch message size in bytes +# ## The allowable size depends on the Event Hub tier, see +# ## https://learn.microsoft.com/azure/event-hubs/event-hubs-quotas#basic-vs-standard-vs-premium-vs-dedicated-tiers +# ## for details. If unset the default size defined by Azure Event Hubs is +# ## used (currently 1,000,000 bytes) +# # max_message_size = "1MB" +# +# ## Timeout for sending the data +# # timeout = "30s" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "json" + + +# # Send metrics to command as input over stdin +# [[outputs.exec]] +# ## Command to ingest metrics via stdin. +# command = ["tee", "-a", "/dev/null"] +# +# ## Environment variables +# ## Array of "key=value" pairs to pass as environment variables +# ## e.g. "KEY=value", "USERNAME=John Doe", +# ## "LD_LIBRARY_PATH=/opt/custom/lib64:/usr/local/libs" +# # environment = [] +# +# ## Timeout for command to complete. +# # timeout = "5s" +# +# ## Whether the command gets executed once per metric, or once per metric batch +# ## The serializer will also run in batch mode when this is true. +# # use_batch_format = true +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" + + +# # Run executable as long-running output plugin +# [[outputs.execd]] +# ## One program to run as daemon. +# ## NOTE: process and each argument should each be their own string +# command = ["my-telegraf-output", "--some-flag", "value"] +# +# ## Environment variables +# ## Array of "key=value" pairs to pass as environment variables +# ## e.g. "KEY=value", "USERNAME=John Doe", +# ## "LD_LIBRARY_PATH=/opt/custom/lib64:/usr/local/libs" +# # environment = [] +# +# ## Delay before the process is restarted after an unexpected termination +# restart_delay = "10s" +# +# ## Flag to determine whether execd should throw error when part of metrics is unserializable +# ## Setting this to true will skip the unserializable metrics and process the rest of metrics +# ## Setting this to false will throw error when encountering unserializable metrics and none will be processed +# ## This setting does not apply when use_batch_format is set. +# # ignore_serialization_error = false +# +# ## Use batch serialization instead of per metric. The batch format allows for the +# ## production of batch output formats and may more efficiently encode and write metrics. +# # use_batch_format = false +# +# ## Data format to export. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" + + +# # Send telegraf metrics to file(s) +# [[outputs.file]] +# ## Files to write to, "stdout" is a specially handled file. +# files = ["stdout", "/tmp/metrics.out"] +# +# ## Use batch serialization format instead of line based delimiting. The +# ## batch format allows for the production of non line based output formats and +# ## may more efficiently encode and write metrics. +# # use_batch_format = false +# +# ## The file will be rotated after the time interval specified. When set +# ## to 0 no time based rotation is performed. +# # rotation_interval = "0h" +# +# ## The logfile will be rotated when it becomes larger than the specified +# ## size. When set to 0 no size based rotation is performed. +# # rotation_max_size = "0MB" +# +# ## Maximum number of rotated archives to keep, any older logs are deleted. +# ## If set to -1, no archives are removed. +# # rotation_max_archives = 5 +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" +# +# ## Compress output data with the specified algorithm. +# ## If empty, compression will be disabled and files will be plain text. +# ## Supported algorithms are "zstd", "gzip" and "zlib". +# # compression_algorithm = "" +# +# ## Compression level for the algorithm above. +# ## Please note that different algorithms support different levels: +# ## zstd -- supports levels 1, 3, 7 and 11. +# ## gzip -- supports levels 0, 1 and 9. +# ## zlib -- supports levels 0, 1, and 9. +# ## By default the default compression level for each algorithm is used. +# # compression_level = -1 + + +# # Configuration for Graphite server to send metrics to +# [[outputs.graphite]] +# ## TCP endpoint for your graphite instance. +# ## If multiple endpoints are configured, the output will be load balanced. +# ## Only one of the endpoints will be written to with each iteration. +# servers = ["localhost:2003"] +# +# ## Local address to bind when connecting to the server +# ## If empty or not set, the local address is automatically chosen. +# # local_address = "" +# +# ## Prefix metrics name +# prefix = "" +# +# ## Graphite output template +# ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# template = "host.tags.measurement.field" +# +# ## Strict sanitization regex +# ## This is the default sanitization regex that is used on data passed to the +# ## graphite serializer. Users can add additional characters here if required. +# ## Be aware that the characters, '/' '@' '*' are always replaced with '_', +# ## '..' is replaced with '.', and '\' is removed even if added to the +# ## following regex. +# # graphite_strict_sanitize_regex = '[^a-zA-Z0-9-:._=\p{L}]' +# +# ## Enable Graphite tags support +# # graphite_tag_support = false +# +# ## Applied sanitization mode when graphite tag support is enabled. +# ## * strict - uses the regex specified above +# ## * compatible - allows for greater number of characters +# # graphite_tag_sanitize_mode = "strict" +# +# ## Character for separating metric name and field for Graphite tags +# # graphite_separator = "." +# +# ## Graphite templates patterns +# ## 1. Template for cpu +# ## 2. Template for disk* +# ## 3. Default template +# # templates = [ +# # "cpu tags.measurement.host.field", +# # "disk* measurement.field", +# # "host.measurement.tags.field" +# #] +# +# ## timeout in seconds for the write connection to graphite +# # timeout = "2s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Send telegraf metrics to graylog +# [[outputs.graylog]] +# ## Endpoints for your graylog instances. +# servers = ["udp://127.0.0.1:12201"] +# +# ## Connection timeout. +# # timeout = "5s" +# +# ## The field to use as the GELF short_message, if unset the static string +# ## "telegraf" will be used. +# ## example: short_message_field = "message" +# # short_message_field = "" +# +# ## According to GELF payload specification, additional fields names must be prefixed +# ## with an underscore. Previous versions did not prefix custom field 'name' with underscore. +# ## Set to true for backward compatibility. +# # name_field_no_prefix = false +# +# ## Connection retry options +# ## Attempt to connect to the endpoints if the initial connection fails. +# ## If 'false', Telegraf will give up after 3 connection attempt and will +# ## exit with an error. If set to 'true', the plugin will retry to connect +# ## to the unconnected endpoints infinitely. +# # connection_retry = false +# ## Time to wait between connection retry attempts. +# # connection_retry_wait_time = "15s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Send telegraf metrics to GroundWork Monitor +# [[outputs.groundwork]] +# ## URL of your groundwork instance. +# url = "https://groundwork.example.com" +# +# ## Agent uuid for GroundWork API Server. +# agent_id = "" +# +# ## Username and password to access GroundWork API. +# username = "" +# password = "" +# +# ## Default application type to use in GroundWork client +# # default_app_type = "TELEGRAF" +# +# ## Default display name for the host with services(metrics). +# # default_host = "telegraf" +# +# ## Default service state. +# # default_service_state = "SERVICE_OK" +# +# ## The name of the tag that contains the hostname. +# # resource_tag = "host" +# +# ## The name of the tag that contains the host group name. +# # group_tag = "group" + + +# # Configurable HTTP health check resource based on metrics +# [[outputs.health]] +# ## Address and port to listen on. +# ## ex: service_address = "http://localhost:8080" +# ## service_address = "unix:///var/run/telegraf-health.sock" +# # service_address = "http://:8080" +# +# ## The maximum duration for reading the entire request. +# # read_timeout = "5s" +# ## The maximum duration for writing the entire response. +# # write_timeout = "5s" +# +# ## Username and password to accept for HTTP basic authentication. +# # basic_username = "user1" +# # basic_password = "secret" +# +# ## Allowed CA certificates for client certificates. +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## TLS server certificate and private key. +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## HTTP status code reported during startup i.e. before any write was called +# # default_status = 200 +# +# ## Maximum expected time between metrics being written +# ## Enforces an unhealthy state if there was no new metric seen for at least +# ## the specified time. The check is disabled by default and only used if a +# ## positive time is specified. +# # max_time_between_metrics = "0s" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## One or more check sub-tables should be defined, it is also recommended to +# ## use metric filtering to limit the metrics that flow into this output. +# ## +# ## When using the default buffer sizes, this example will fail when the +# ## metric buffer is half full. +# ## +# ## namepass = ["internal_write"] +# ## tagpass = { output = ["influxdb"] } +# ## +# ## [[outputs.health.compares]] +# ## field = "buffer_size" +# ## lt = 5000.0 +# ## +# ## [[outputs.health.contains]] +# ## field = "buffer_size" + + +# # A plugin that can transmit heartbeats over HTTP +# [[outputs.heartbeat]] +# ## URL of heartbeat endpoint +# url = "http://monitoring.example.com/heartbeat" +# +# ## Unique identifier to submit for the Telegraf instance (required) +# instance_id = "agent-123" +# +# ## Token for bearer authentication +# # token = "" +# +# ## Interval for sending heartbeat messages +# # interval = "1m" +# +# ## Information to include in the message, available options are +# ## hostname -- hostname of the instance running Telegraf +# ## statistics -- number of metrics, logged errors and warnings, etc +# ## configs -- redacted list of configs loaded by this instance +# ## logs -- detailed log-entries for this instance +# ## status -- result of the status condition evaluation +# # include = ["hostname"] +# +# ## Logging information filtering, only applies if "logs" is added to "include" +# # [outputs.heartbeat.logs] +# # ## Number of log entries to send (unlimited by default) +# # ## In case more log-entries are available entries with higher log levels +# # ## and more recent entries are preferred. +# # # limit = 0 +# # +# # ## Minimum log-level for sending the entry +# # # level = "error" +# +# ## Logical conditions to determine the agent status, only applies if "status" +# ## is included in the message +# # [outputs.heartbeat.status] +# # ## Conditions to signal the given status as CEL programs returning a +# # ## boolean. Conditions are evaluated in the order below until a program +# # ## evaluates to "true". +# # # ok = "false" +# # # warn = "false" +# # # fail = "false" +# # +# # ## Evaluation order of the conditions above; available: "ok", "warn", "fail" +# # # order = ["ok", "warn", "fail"] +# # +# # ## Default status used if none of the conditions above matches +# # ## available: "ok", "warn", "fail", "undefined" +# # # default = "ok" +# # +# # ## If set, send this initial status before the first write, otherwise +# # ## compute the status from the conditions and default above. +# # ## available: "ok", "warn", "fail", "undefined", "" +# # # initial = "" +# +# ## Additional HTTP headers +# # [outputs.heartbeat.headers] +# # User-Agent = "telegraf" + + +# # A plugin that can transmit metrics over HTTP +# [[outputs.http]] +# ## URL is the address to send metrics to +# url = "http://127.0.0.1:8080/telegraf" +# +# ## HTTP method, one of: "POST" or "PUT" or "PATCH" +# # method = "POST" +# +# ## HTTP Basic Auth credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Goole API Auth +# # google_application_credentials = "/etc/telegraf/example_secret.json" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## OAuth2 Client Credentials. The options 'client_id', 'client_secret', and 'token_url' are required to use OAuth2. +# # client_id = "clientid" +# # client_secret = "secret" +# # token_url = "https://indentityprovider/oauth2/v1/token" +# # audience = "" +# # scopes = ["urn:opc:idm:__myscopes__"] +# +# ## Optional Cookie authentication +# # cookie_auth_url = "https://localhost/authMe" +# # cookie_auth_method = "POST" +# # cookie_auth_username = "username" +# # cookie_auth_password = "pa$$word" +# # cookie_auth_headers = { Content-Type = "application/json", X-MY-HEADER = "hello" } +# # cookie_auth_body = '{"username": "user", "password": "pa$$word", "authenticate": "me"}' +# ## cookie_auth_renewal not set or set to "0" will auth once and never renew the cookie +# # cookie_auth_renewal = "0s" +# +# ## Data format to output. +# ## Each data format has it's own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" +# +# ## Use batch serialization format (default) instead of line based format. +# ## Batch format is more efficient and should be used unless line based +# ## format is really needed. +# # use_batch_format = true +# +# ## HTTP Content-Encoding for write request body, can be set to "gzip" to +# ## compress body or "identity" to apply no encoding. +# # content_encoding = "identity" +# +# ## Amazon Region +# #region = "us-east-1" +# +# ## Amazon Credentials +# ## Amazon Credentials are not built unless the following aws_service +# ## setting is set to a non-empty string. It may need to match the name of +# ## the service output to as well +# #aws_service = "execute-api" +# +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# #access_key = "" +# #secret_key = "" +# #token = "" +# #role_arn = "" +# #web_identity_token_file = "" +# #role_session_name = "" +# #profile = "" +# #shared_credential_file = "" +# +# ## Optional list of statuscodes (<200 or >300) upon which requests should not be retried +# # non_retryable_statuscodes = [409, 413] +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Additional HTTP headers +# # [outputs.http.headers] +# # ## Should be set manually to "application/json" for json data_format +# # Content-Type = "text/plain; charset=utf-8" + + +# # Configuration for sending metrics to InfluxDB +# [[outputs.influxdb]] +# ## The full HTTP or UDP URL for your InfluxDB instance. +# ## +# ## Multiple URLs can be specified for a single cluster, only ONE of the +# ## urls will be written to each interval. +# # urls = ["unix:///var/run/influxdb.sock"] +# # urls = ["udp://127.0.0.1:8089"] +# # urls = ["http://127.0.0.1:8086"] +# +# ## Local address to bind when connecting to the server +# ## If empty or not set, the local address is automatically chosen. +# # local_address = "" +# +# ## The target database for metrics; will be created as needed. +# ## For UDP url endpoint database needs to be configured on server side. +# # database = "telegraf" +# +# ## The value of this tag will be used to determine the database. If this +# ## tag is not set the 'database' option is used as the default. +# # database_tag = "" +# +# ## If true, the 'database_tag' will not be included in the written metric. +# # exclude_database_tag = false +# +# ## If true, no CREATE DATABASE queries will be sent. Set to true when using +# ## Telegraf with a user without permissions to create databases or when the +# ## database already exists. +# # skip_database_creation = false +# +# ## Name of existing retention policy to write to. Empty string writes to +# ## the default retention policy. Only takes effect when using HTTP. +# # retention_policy = "" +# +# ## The value of this tag will be used to determine the retention policy. If this +# ## tag is not set the 'retention_policy' option is used as the default. +# # retention_policy_tag = "" +# +# ## If true, the 'retention_policy_tag' will not be included in the written metric. +# # exclude_retention_policy_tag = false +# +# ## Write consistency (clusters only), can be: "any", "one", "quorum", "all". +# ## Only takes effect when using HTTP. +# # write_consistency = "any" +# +# ## Timeout for HTTP messages. +# # timeout = "5s" +# +# ## HTTP Basic Auth +# # username = "telegraf" +# # password = "metricsmetricsmetricsmetrics" +# +# ## HTTP User-Agent +# # user_agent = "telegraf" +# +# ## UDP payload size is the maximum packet size to send. +# # udp_payload = "512B" +# +# ## Optional TLS Config for use on HTTP connections. +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## HTTP Proxy override, if unset values the standard proxy environment +# ## variables are consulted to determine which proxy, if any, should be used. +# # http_proxy = "http://corporate.proxy:3128" +# +# ## Additional HTTP headers +# # http_headers = {"X-Special-Header" = "Special-Value"} +# +# ## HTTP Content-Encoding for write request body, can be set to "gzip" to +# ## compress body or "identity" to apply no encoding. +# # content_encoding = "gzip" +# +# ## When true, Telegraf will output unsigned integers as unsigned values, +# ## for example "42u". You will need a version of InfluxDB supporting unsigned +# ## integer values. Enabling this option will result in field type errors if +# ## existing data has been written. +# # influx_uint_support = false +# +# ## When true, Telegraf will omit the timestamp on data to allow InfluxDB +# ## to set the timestamp of the data during ingestion. This is generally NOT +# ## what you want as it can lead to data points captured at different times +# ## getting omitted due to similar data. +# # influx_omit_timestamp = false + + +# # Configuration for sending metrics to InfluxDB 3.x Core and Enterprise +# [[outputs.influxdb_v3]] +# ## Multiple URLs can be specified but only ONE of them will be selected +# ## randomly in each interval for writing. If endpoints are unavailable another +# ## one will be used until all are exhausted or the write succeeds. +# urls = ["http://127.0.0.1:8181"] +# +# ## Token for authentication +# token = "" +# +# ## Destination database to write into +# database = "" +# +# ## The value of this tag will be used to determine the database. If this +# ## tag is not set the 'database' option is used as the default. +# # database_tag = "" +# +# ## If true, the database tag will not be added to the metric +# # exclude_database_tag = false +# +# ## Wait for WAL persistence to complete synchronization +# ## Setting this to false reduces latency but increases the risk of data loss. +# ## See https://docs.influxdata.com/influxdb3/enterprise/write-data/http-api/v3-write-lp/#use-no_sync-for-immediate-write-responses +# # sync = true +# +# ## Enable or disable conversion of unsigned integer fields to signed integers +# ## This is useful if existing data exist as signed integers e.g. from previous +# ## versions of InfluxDB. +# # convert_uint_to_int = false +# +# ## Omit the timestamp of the metrics when sending to allow InfluxDB to set the +# ## timestamp of the data during ingestion. You likely want this to be false +# ## to submit the metric timestamp +# # omit_timestamp = false +# +# ## HTTP User-Agent +# # user_agent = "telegraf" +# +# ## Content-Encoding for write request body, available values are "gzip", +# ## "none" and "identity" +# # content_encoding = "gzip" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## HTTP connection settings +# # idle_conn_timeout = "0s" +# # max_idle_conn = 0 +# # max_idle_conn_per_host = 0 +# # response_timeout = "0s" +# +# ## Use the local address for connecting, assigned by the OS by default +# # local_address = "" +# +# ## Optional proxy settings +# # use_system_proxy = false +# # http_proxy_url = "" +# +# ## Optional TLS settings +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## OAuth2 Client Credentials. The options 'client_id', 'client_secret', and 'token_url' are required to use OAuth2. +# # client_id = "clientid" +# # client_secret = "secret" +# # token_url = "https://indentityprovider/oauth2/v1/token" +# # audience = "" +# # scopes = ["urn:opc:idm:__myscopes__"] +# +# ## Optional Cookie authentication +# # cookie_auth_url = "https://localhost/authMe" +# # cookie_auth_method = "POST" +# # cookie_auth_username = "username" +# # cookie_auth_password = "pa$$word" +# # cookie_auth_headers = { Content-Type = "application/json", X-MY-HEADER = "hello" } +# # cookie_auth_body = '{"username": "user", "password": "pa$$word", "authenticate": "me"}' +# ## cookie_auth_renewal not set or set to "0" will auth once and never renew the cookie +# # cookie_auth_renewal = "0s" + + +# # Send telegraf metrics to Apache Inlong +# [[outputs.inlong]] +# ## Manager URL to obtain the Inlong data-proxy IP list for sending the data +# url = "http://127.0.0.1:8083" +# +# ## Unique identifier for the data-stream group +# group_id = "telegraf" +# +# ## Unique identifier for the data stream within its group +# stream_id = "telegraf" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" + + +# # Configuration for sending metrics to an Instrumental project +# [[outputs.instrumental]] +# ## Project API Token (required) +# api_token = "API Token" # required +# ## Prefix the metrics with a given name +# prefix = "" +# ## Stats output template (Graphite formatting) +# ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite +# template = "host.tags.measurement.field" +# ## Timeout in seconds to connect +# timeout = "2s" +# ## Debug true - Print communication to Instrumental +# debug = false + + +# # Save metrics to an IoTDB Database +# [[outputs.iotdb]] +# ## Configuration of IoTDB server connection +# host = "127.0.0.1" +# # port = "6667" +# +# ## Configuration of authentication +# # user = "root" +# # password = "root" +# +# ## Timeout to open a new session. +# ## A value of zero means no timeout. +# # timeout = "5s" +# +# ## Configuration of type conversion for 64-bit unsigned int +# ## IoTDB currently DOES NOT support unsigned integers (version 13.x). +# ## 32-bit unsigned integers are safely converted into 64-bit signed integers by the plugin, +# ## however, this is not true for 64-bit values in general as overflows may occur. +# ## The following setting allows to specify the handling of 64-bit unsigned integers. +# ## Available values are: +# ## - "int64" -- convert to 64-bit signed integers and accept overflows +# ## - "int64_clip" -- convert to 64-bit signed integers and clip the values on overflow to 9,223,372,036,854,775,807 +# ## - "text" -- convert to the string representation of the value +# # uint64_conversion = "int64_clip" +# +# ## Configuration of TimeStamp +# ## TimeStamp is always saved in 64bits int. timestamp_precision specifies the unit of timestamp. +# ## Available value: +# ## "second", "millisecond", "microsecond", "nanosecond"(default) +# # timestamp_precision = "nanosecond" +# +# ## Handling of tags +# ## Tags are not fully supported by IoTDB. +# ## A guide with suggestions on how to handle tags can be found here: +# ## https://iotdb.apache.org/UserGuide/Master/API/InfluxDB-Protocol.html +# ## +# ## Available values are: +# ## - "fields" -- convert tags to fields in the measurement +# ## - "device_id" -- attach tags to the device ID +# ## +# ## For Example, a metric named "root.sg.device" with the tags `tag1: "private"` and `tag2: "working"` and +# ## fields `s1: 100` and `s2: "hello"` will result in the following representations in IoTDB +# ## - "fields" -- root.sg.device, s1=100, s2="hello", tag1="private", tag2="working" +# ## - "device_id" -- root.sg.device.private.working, s1=100, s2="hello" +# # convert_tags_to = "device_id" +# +# ## Handling of unsupported characters +# ## Some characters in different versions of IoTDB are not supported in path name +# ## A guide with suggetions on valid paths can be found here: +# ## for iotdb 0.13.x -> https://iotdb.apache.org/UserGuide/V0.13.x/Reference/Syntax-Conventions.html#identifiers +# ## for iotdb 1.x.x and above -> https://iotdb.apache.org/UserGuide/V1.3.x/User-Manual/Syntax-Rule.html#identifier +# ## +# ## Available values are: +# ## - "1.0", "1.1", "1.2", "1.3" -- use backticks to enclose tags with forbidden characters +# ## such as @$#:[]{}() and space +# ## - "0.13" -- use backticks to enclose tags with forbidden characters +# ## such as space +# ## Keep this section commented if you don't want to sanitize the path +# # sanitize_tag = "1.3" + + +# # Configuration for the Kafka server to send metrics to +# [[outputs.kafka]] +# ## URLs of kafka brokers +# ## The brokers listed here are used to connect to collect metadata about a +# ## cluster. However, once the initial metadata collect is completed, telegraf +# ## will communicate solely with the kafka leader and not all defined brokers. +# brokers = ["localhost:9092"] +# +# ## Kafka topic for producer messages +# topic = "telegraf" +# +# ## Tag value to be used as the topic. If not set or the tag does not exist, +# ## the 'topic' option is used. +# # topic_tag = "" +# +# ## If true, the 'topic_tag' will be removed from to the metric. +# # exclude_topic_tag = false +# +# ## Optional Client id +# # client_id = "Telegraf" +# +# ## Set the minimal supported Kafka version. Setting this enables the use of new +# ## Kafka features and APIs. Of particular interested, lz4 compression +# ## requires at least version 0.10.0.0. +# ## ex: version = "1.1.0" +# # version = "" +# +# ## The routing tag specifies a tagkey on the metric whose value is used as +# ## the message key. The message key is used to determine which partition to +# ## send the message to. This tag is preferred over the routing_key option. +# routing_tag = "host" +# +# ## The routing key is set as the message key and used to determine which +# ## partition to send the message to. This value is only used when no +# ## routing_tag is set or as a fallback when the tag specified in routing tag +# ## is not found. +# ## +# ## If set to "random", a random value will be generated for each message. +# ## +# ## When unset, no message key is added and each message is routed to a random +# ## partition. +# ## +# ## ex: routing_key = "random" +# ## routing_key = "telegraf" +# # routing_key = "" +# +# ## Compression codec represents the various compression codecs recognized by +# ## Kafka in messages. +# ## 0 : None +# ## 1 : Gzip +# ## 2 : Snappy +# ## 3 : LZ4 +# ## 4 : ZSTD +# # compression_codec = 0 +# +# ## Idempotent Writes +# ## If enabled, exactly one copy of each message is written. +# # idempotent_writes = false +# +# ## RequiredAcks is used in Produce Requests to tell the broker how many +# ## replica acknowledgements it must see before responding +# ## 0 : the producer never waits for an acknowledgement from the broker. +# ## This option provides the lowest latency but the weakest durability +# ## guarantees (some data will be lost when a server fails). +# ## 1 : the producer gets an acknowledgement after the leader replica has +# ## received the data. This option provides better durability as the +# ## client waits until the server acknowledges the request as successful +# ## (only messages that were written to the now-dead leader but not yet +# ## replicated will be lost). +# ## -1: the producer gets an acknowledgement after all in-sync replicas have +# ## received the data. This option provides the best durability, we +# ## guarantee that no messages will be lost as long as at least one in +# ## sync replica remains. +# # required_acks = -1 +# +# ## The maximum number of times to retry sending a metric before failing +# ## until the next flush. +# # max_retry = 3 +# +# ## The maximum permitted size of a message. Should be set equal to or +# ## smaller than the broker's 'message.max.bytes'. +# # max_message_bytes = 1000000 +# +# ## Producer timestamp +# ## This option sets the timestamp of the kafka producer message, choose from: +# ## * metric: Uses the metric's timestamp +# ## * now: Uses the time of write +# # producer_timestamp = metric +# +# ## Add metric name as specified kafka header if not empty +# # metric_name_header = "" +# +# ## Optional TLS Config +# # enable_tls = false +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Period between keep alive probes. +# ## Defaults to the OS configuration if not specified or zero. +# # keep_alive_period = "15s" +# +# ## Optional SOCKS5 proxy to use when connecting to brokers +# # socks5_enabled = true +# # socks5_address = "127.0.0.1:1080" +# # socks5_username = "alice" +# # socks5_password = "pass123" +# +# ## Optional SASL Config +# # sasl_username = "" +# # sasl_password = "" +# +# ## Optional SASL, one of: +# ## OAUTHBEARER, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI, AWS-MSK-IAM +# # sasl_mechanism = "" +# +# ## Used if sasl_mechanism is GSSAPI +# # sasl_gssapi_service_name = "" +# # ## One of: KRB5_USER_AUTH and KRB5_KEYTAB_AUTH +# # sasl_gssapi_auth_type = "KRB5_USER_AUTH" +# # sasl_gssapi_kerberos_config_path = "/" +# # sasl_gssapi_realm = "realm" +# # sasl_gssapi_key_tab_path = "" +# # sasl_gssapi_disable_pafxfast = false +# +# ## Access token used if sasl_mechanism is OAUTHBEARER +# # sasl_access_token = "" +# +# ## Used if sasl_mechanism is AWS-MSK-IAM +# # sasl_aws_msk_iam_region = "" +# ## for profile based auth +# ## sasl_aws_msk_iam_profile = "" +# ## for role based auth +# ## sasl_aws_msk_iam_role = "" +# ## sasl_aws_msk_iam_session = "" +# +# ## Arbitrary key value string pairs to pass as a TOML table. For example: +# ## {logicalCluster = "cluster-042", poolId = "pool-027"} +# # sasl_extensions = {} +# +# ## SASL protocol version. When connecting to Azure EventHub set to 0. +# # sasl_version = 1 +# +# ## Disable Kafka metadata full fetch +# # metadata_full = false +# +# ## Maximum number of retries for metadata operations including +# ## connecting. Sets Sarama library's Metadata.Retry.Max config value. If 0 or +# ## unset, use the Sarama default of 3, +# # metadata_retry_max = 0 +# +# ## Type of retry backoff. Valid options: "constant", "exponential" +# # metadata_retry_type = "constant" +# +# ## Amount of time to wait before retrying. When metadata_retry_type is +# ## "constant", each retry is delayed this amount. When "exponential", the +# ## first retry is delayed this amount, and subsequent delays are doubled. If 0 +# ## or unset, use the Sarama default of 250 ms +# # metadata_retry_backoff = 0 +# +# ## Maximum amount of time to wait before retrying when metadata_retry_type is +# ## "exponential". Ignored for other retry types. If 0, there is no backoff +# ## limit. +# # metadata_retry_max_duration = 0 +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Optional topic suffix configuration. +# ## If the section is omitted, no suffix is used. +# ## Following topic suffix methods are supported: +# ## measurement - suffix equals to separator + measurement's name +# ## tags - suffix equals to separator + specified tags' values +# ## interleaved with separator +# +# ## Suffix equals to "_" + measurement name +# # [outputs.kafka.topic_suffix] +# # method = "measurement" +# # separator = "_" +# +# ## Suffix equals to "__" + measurement's "foo" tag value. +# ## If there's no such a tag, suffix equals to an empty string +# # [outputs.kafka.topic_suffix] +# # method = "tags" +# # keys = ["foo"] +# # separator = "__" +# +# ## Suffix equals to "_" + measurement's "foo" and "bar" +# ## tag values, separated by "_". If there is no such tags, +# ## their values treated as empty strings. +# # [outputs.kafka.topic_suffix] +# # method = "tags" +# # keys = ["foo", "bar"] +# # separator = "_" + + +# # Configuration for the AWS Kinesis output. +# [[outputs.kinesis]] +# ## Amazon REGION of kinesis endpoint. +# region = "ap-southeast-2" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# #access_key = "" +# #secret_key = "" +# #token = "" +# #role_arn = "" +# #web_identity_token_file = "" +# #role_session_name = "" +# #profile = "" +# #shared_credential_file = "" +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default. +# ## ex: endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Kinesis StreamName must exist prior to starting telegraf. +# streamname = "StreamName" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" +# +# ## debug will show upstream aws messages. +# debug = false +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## The partition key can be calculated using one of several methods: +# ## +# ## Use a static value for all writes: +# # [outputs.kinesis.partition] +# # method = "static" +# # key = "howdy" +# # +# ## Use a random partition key on each write: +# # [outputs.kinesis.partition] +# # method = "random" +# # +# ## Use the measurement name as the partition key: +# # [outputs.kinesis.partition] +# # method = "measurement" +# # +# ## Use the value of a tag for all writes, if the tag is not set the empty +# ## default option will be used. When no default, defaults to "telegraf" +# # [outputs.kinesis.partition] +# # method = "tag" +# # key = "host" +# # default = "mykey" + + +# # Configuration for Librato API to send metrics to. +# [[outputs.librato]] +# ## Librato API Docs +# ## http://dev.librato.com/v1/metrics-authentication +# ## Librato API user +# api_user = "telegraf@influxdb.com" # required. +# ## Librato API token +# api_token = "my-secret-token" # required. +# ## Debug +# # debug = false +# ## Connection timeout. +# # timeout = "5s" +# ## Output source Template (same as graphite buckets) +# ## see https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md#graphite +# ## This template is used in librato's source (not metric's name) +# template = "host" + + +# # A plugin that can send metrics over HTTPs to Logz.io +# [[outputs.logzio]] +# ## Connection timeout, defaults to "5s" if not set. +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Logz.io account token +# token = "your logz.io token" # required +# +# ## Use your listener URL for your Logz.io account region. +# # url = "https://listener.logz.io:8071" + + +# # A plugin that can transmit logs to Loki +# [[outputs.loki]] +# ## The domain of Loki +# domain = "https://loki.domain.tld" +# +# ## Endpoint to write api +# # endpoint = "/loki/api/v1/push" +# +# ## Connection timeout, defaults to "5s" if not set. +# # timeout = "5s" +# +# ## Basic auth credential +# # username = "loki" +# # password = "pass" +# +# ## Additional HTTP headers +# # http_headers = {"X-Scope-OrgID" = "1"} +# +# ## If the request must be gzip encoded +# # gzip_request = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Sanitize Tag Names +# ## If true, all tag names will have invalid characters replaced with +# ## underscores that do not match the regex: ^[a-zA-Z_][a-zA-Z0-9_]*. +# # sanitize_label_names = false +# +# ## Metric Name Label +# ## Label to use for the metric name to when sending metrics. If set to an +# ## empty string, this will not add the label. This is NOT suggested as there +# ## is no way to differentiate between multiple metrics. +# # metric_name_label = "__name" + + +# # Sends metrics to Microsoft Fabric +# [[outputs.microsoft_fabric]] +# ## The URI property of the resource on Microsoft Fabric +# connection_string = "https://trd-abcd.xx.kusto.fabric.microsoft.com;Database=kusto_eh;Table Name=telegraf_dump;Key=value" +# +# ## Client timeout +# # timeout = "30s" + + +# # A plugin that can transmit logs to mongodb +# [[outputs.mongodb]] +# ## Connection string +# ## example: dsn = "mongodb://mongod1:27017,mongod2:27017,mongod3:27017/admin&replicaSet=myReplSet&w=1" +# dsn = "mongodb://localhost:27017" +# +# ## Overrides serverSelectionTimeoutMS in DSN if set +# # timeout = "30s" +# +# ## Authentication method, available options are NONE, PLAIN, SCRAM, X509 +# # authentication = "NONE" +# +# # ## for SCRAM-SHA-256 authentication +# # # authentication = "SCRAM" +# # # username = "root" +# # # password = "***" +# +# # ## for PLAIN authentication (e.g., LDAP) +# # ## IMPORTANT: PLAIN authentication sends credentials in plaintext during the +# # ## authentication handshake. Always use TLS to encrypt credentials in transit. +# # # authentication = "PLAIN" +# # # username = "myuser" +# # # password = "***" +# +# # ## X509 based certificate authentication +# # # authentication = "X509" +# # # tls_ca = "ca.pem" +# # # tls_key = "client.pem" +# # # # tls_key_pwd = "changeme" # required for encrypted tls_key +# # # insecure_skip_verify = false +# +# ## Database to store measurements and time series collections +# # database = "telegraf" +# +# ## Granularity can be seconds, minutes, or hours. +# ## Configuring this value will be based on your input collection frequency +# ## see https://docs.mongodb.com/manual/core/timeseries-collections/#create-a-time-series-collection +# # granularity = "seconds" +# +# ## TTL to automatically expire documents from the measurement collections. +# # ttl = "360h" +# +# ## If true, write multiple metrics for the same collection in a batched +# ## fashion. Otherwise, write each metric individually. +# # write_batch = false + + +# # Configuration for MQTT server to send metrics to +# [[outputs.mqtt]] +# ## MQTT Brokers +# ## The list of brokers should only include the hostname or IP address and the +# ## port to the broker. This should follow the format `[{scheme}://]{host}:{port}`. For +# ## example, `localhost:1883` or `mqtt://localhost:1883`. +# ## Scheme can be any of the following: tcp://, mqtt://, tls://, mqtts:// +# ## non-TLS and TLS servers can not be mix-and-matched. +# servers = ["localhost:1883", ] # or ["mqtts://tls.example.com:1883"] +# +# ## Protocol can be `3.1.1` or `5`. Default is `3.1.1` +# # protocol = "3.1.1" +# +# ## MQTT Topic for Producer Messages +# ## MQTT outputs send metrics to this topic format: +# ## prefix/{{ .Tag "host" }}/{{ .Name }}/{{ .Tag "tag_key" }} +# ## (e.g. prefix/web01.example.com/mem/some_tag_value) +# ## Each path segment accepts either a template placeholder, an environment variable, or a tag key +# ## of the form `{{.Tag "tag_key_name"}}`. All the functions provided by the Sprig library +# ## (http://masterminds.github.io/sprig/) are available. Empty path elements as well as special MQTT +# ## characters (such as `+` or `#`) are invalid to form the topic name and will lead to an error. +# ## In case a tag is missing in the metric, that path segment omitted for the final topic. +# topic = 'telegraf/{{ .Tag "host" }}/{{ .Name }}' +# +# ## QoS policy for messages +# ## The mqtt QoS policy for sending messages. +# ## See https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q029090_.htm +# ## 0 = at most once +# ## 1 = at least once +# ## 2 = exactly once +# # qos = 2 +# +# ## Keep Alive +# ## Defines the maximum length of time that the broker and client may not +# ## communicate. Defaults to 0 which turns the feature off. +# ## +# ## For version v2.0.12 and later mosquitto there is a bug +# ## (see https://github.com/eclipse/mosquitto/issues/2117), which requires +# ## this to be non-zero. As a reference eclipse/paho.mqtt.golang defaults to 30. +# # keep_alive = 0 +# +# ## username and password to connect MQTT server. +# # username = "telegraf" +# # password = "metricsmetricsmetricsmetrics" +# +# ## client ID +# ## The unique client id to connect MQTT server. If this parameter is not set +# ## then a random ID is generated. +# # client_id = "" +# +# ## Timeout for write operations. default: 5s +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## When true, metric will have RETAIN flag set, making broker cache entries until someone +# ## actually reads it +# # retain = false +# +# ## Layout of the topics published. +# ## The following choices are available: +# ## non-batch -- send individual messages, one for each metric +# ## batch -- send all metric as a single message per MQTT topic +# ## NOTE: The following options will ignore the 'data_format' option and send single values +# ## field -- send individual messages for each field, appending its name to the metric topic +# ## homie-v4 -- send metrics with fields and tags according to the 4.0.0 specs +# ## see https://homieiot.github.io/specification/ +# # layout = "non-batch" +# +# ## HOMIE specific settings +# ## The following options provide templates for setting the device name +# ## and the node-ID for the topics. Both options are MANDATORY and can contain +# ## {{ .Name }} (metric name), {{ .Tag "key"}} (tag reference to 'key') or +# ## constant strings. The templates MAY NOT contain slashes! +# # homie_device_name = "" +# # homie_node_id = "" +# +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Optional MQTT 5 publish properties +# ## These setting only apply if the "protocol" property is set to 5. This must +# ## be defined at the end of the plugin settings, otherwise TOML will assume +# ## anything else is part of this table. For more details on publish properties +# ## see the spec: +# ## https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901109 +# # [outputs.mqtt.v5] +# # content_type = "" +# # response_topic = "" +# # message_expiry = "0s" +# # topic_alias = 0 +# # [outputs.mqtt.v5.user_properties] +# # "key1" = "value 1" +# # "key2" = "value 2" + + +# # Send telegraf measurements to NATS +# [[outputs.nats]] +# ## URLs of NATS servers +# servers = ["nats://localhost:4222"] +# +# ## Optional client name +# # name = "" +# +# ## Optional credentials +# # username = "" +# # password = "" +# +# ## Optional NATS 2.0 and NATS NGS compatible user credentials +# # credentials = "" +# +# ## Optional authentication with nkey seed file (NATS 2.0) +# # nkey_seed = "/etc/telegraf/seed.txt" +# +# ## NATS subject for producer messages. +# ## This field can be a static string or a Go template, see README for details. +# ## Incompatible with `use_batch_format +# subject = "telegraf" +# +# ## Use Transport Layer Security +# # secure = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Use batch serialization instead of per metric. The batch format allows for the +# ## production of batch output formats and may more efficiently encode and write metrics. +# # use_batch_format = false +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" +# +# ## Jetstream specific configuration. If not nil, it will assume Jetstream context. +# ## Since this is a table, it should be present at the end of the plugin section. Else you can use inline table format. +# # [outputs.nats.jetstream] +# ## Name of the stream, required when using jetstream. +# # name = "" +# ## List of subjects to register on the stream +# # subjects = [] +# +# ## Use asynchronous publishing for higher throughput, but note that it does not guarantee order within batches. +# # async_publish = false +# +# ## Timeout for wating on acknowledgement on asynchronous publishing +# ## String with valid units "ns", "us" (or "µs"), "ms", "s", "m", "h". +# # async_ack_timeout = "5s" +# +# ## Full jetstream create stream config, refer: https://docs.nats.io/nats-concepts/jetstream/streams +# # retention = "limits" +# # max_consumers = -1 +# # max_msgs_per_subject = -1 +# # max_msgs = -1 +# # max_bytes = -1 +# # max_age = 0 +# # max_msg_size = -1 +# # storage = "file" +# # discard = "old" +# # num_replicas = 1 +# # duplicate_window = 120000000000 +# # sealed = false +# # deny_delete = false +# # deny_purge = false +# # allow_rollup_hdrs = false +# # allow_direct = true +# # mirror_direct = false +# +# ## Disable creating the stream but assume the stream is managed externally +# ## and already exists. This will make the plugin fail if the steam does not exist. +# # disable_stream_creation = false + + +# # Send aggregated metrics to Nebius.Cloud Monitoring +# [[outputs.nebius_cloud_monitoring]] +# ## Timeout for HTTP writes. +# # timeout = "20s" +# +# ## Nebius.Cloud monitoring API endpoint. Normally should not be changed + + +# # Send metrics to New Relic metrics endpoint +# [[outputs.newrelic]] +# ## The 'insights_key' parameter requires a NR license key. +# ## New Relic recommends you create one +# ## with a convenient name such as TELEGRAF_INSERT_KEY. +# ## reference: https://docs.newrelic.com/docs/apis/intro-apis/new-relic-api-keys/#ingest-license-key +# # insights_key = "New Relic License Key Here" +# +# ## Prefix to add to add to metric name for easy identification. +# ## This is very useful if your metric names are ambiguous. +# # metric_prefix = "" +# +# ## Timeout for writes to the New Relic API. +# # timeout = "15s" +# +# ## HTTP Proxy override. If unset use values from the standard +# ## proxy environment variables to determine proxy, if any. +# # http_proxy = "http://corporate.proxy:3128" +# +# ## Metric URL override to enable geographic location endpoints. +# # If not set use values from the standard +# # metric_url = "https://metric-api.newrelic.com/metric/v1" + + +# # Send telegraf measurements to NSQD +# [[outputs.nsq]] +# ## Location of nsqd instance listening on TCP +# server = "localhost:4150" +# ## NSQ topic for producer messages +# topic = "telegraf" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" + + +# # Configuration for OpenSearch to send metrics to. +# [[outputs.opensearch]] +# ## URLs +# ## The full HTTP endpoint URL for your OpenSearch instance. Multiple URLs can +# ## be specified as part of the same cluster, but only one URLs is used to +# ## write during each interval. +# urls = ["http://node1.os.example.com:9200"] +# +# ## Index Name +# ## Target index name for metrics (OpenSearch will create if it not exists). +# ## This is a Golang template (see https://pkg.go.dev/text/template) +# ## You can also specify +# ## metric name (`{{.Name}}`), tag value (`{{.Tag "tag_name"}}`), field value (`{{.Field "field_name"}}`) +# ## If the tag does not exist, the default tag value will be empty string "". +# ## the timestamp (`{{.Time.Format "xxxxxxxxx"}}`). +# ## For example: "telegraf-{{.Time.Format \"2006-01-02\"}}-{{.Tag \"host\"}}" would set it to telegraf-2023-07-27-HostName +# index_name = "" +# +# ## Timeout +# ## OpenSearch client timeout +# # timeout = "5s" +# +# ## Sniffer +# ## Set to true to ask OpenSearch a list of all cluster nodes, +# ## thus it is not necessary to list all nodes in the urls config option +# # enable_sniffer = false +# +# ## GZIP Compression +# ## Set to true to enable gzip compression +# # enable_gzip = false +# +# ## Health Check Interval +# ## Set the interval to check if the OpenSearch nodes are available +# ## Setting to "0s" will disable the health check (not recommended in production) +# # health_check_interval = "10s" +# +# ## Set the timeout for periodic health checks. +# # health_check_timeout = "1s" +# ## HTTP basic authentication details. +# # username = "" +# # password = "" +# ## HTTP bearer token authentication details +# # auth_bearer_token = "" +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Template Config +# ## Manage templates +# ## Set to true if you want telegraf to manage its index template. +# ## If enabled it will create a recommended index template for telegraf indexes +# # manage_template = true +# +# ## Template Name +# ## The template name used for telegraf indexes +# # template_name = "telegraf" +# +# ## Overwrite Templates +# ## Set to true if you want telegraf to overwrite an existing template +# # overwrite_template = false +# +# ## Document ID +# ## If set to true a unique ID hash will be sent as +# ## sha256(concat(timestamp,measurement,series-hash)) string. It will enable +# ## data resend and update metric points avoiding duplicated metrics with +# ## different id's +# # force_document_id = false +# +# ## Value Handling +# ## Specifies the handling of NaN and Inf values. +# ## This option can have the following values: +# ## none -- do not modify field-values (default); will produce an error +# ## if NaNs or infs are encountered +# ## drop -- drop fields containing NaNs or infs +# ## replace -- replace with the value in "float_replacement_value" (default: 0.0) +# ## NaNs and inf will be replaced with the given number, -inf with the negative of that number +# # float_handling = "none" +# # float_replacement_value = 0.0 +# +# ## Pipeline Config +# ## To use a ingest pipeline, set this to the name of the pipeline you want to use. +# # use_pipeline = "my_pipeline" +# +# ## Pipeline Name +# ## Additionally, you can specify a tag name using the notation (`{{.Tag "tag_name"}}`) +# ## which will be used as the pipeline name (e.g. "{{.Tag "os_pipeline"}}"). +# ## If the tag does not exist, the default pipeline will be used as the pipeline. +# ## If no default pipeline is set, no pipeline is used for the metric. +# # default_pipeline = "" + + +# # Send OpenTelemetry metrics over gRPC +# [[outputs.opentelemetry]] +# ## Override the default (localhost:4317) OpenTelemetry gRPC service +# ## When the protocol is grpc, address:port +# ## When the protocol is http, http(s)://address:port/path +# # service_address = "localhost:4317" +# ## Override the default (protobuf) encodingType when Protocol is http +# ## protobuf, json +# # encoding_type = "protobuf" +# +# ## Override the default (5s) request timeout +# # timeout = "5s" +# +# ## Optional TLS Config. +# ## +# ## Root certificates for verifying server certificates encoded in PEM format. +# # tls_ca = "/etc/telegraf/ca.pem" +# ## The public and private key pairs for the client encoded in PEM format. +# ## May contain intermediate certificates. +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS, but skip TLS chain and host verification. +# # insecure_skip_verify = false +# ## Send the specified TLS server name via SNI. +# # tls_server_name = "foo.example.com" +# +# ## Override the default (gzip) compression used to send data. +# ## Supports: "gzip", "none" +# # compression = "gzip" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Configuration options for the Coralogix dialect +# ## Enable the following section of you use this plugin with a Coralogix endpoint +# # [outputs.opentelemetry.coralogix] +# # ## Your Coralogix private key (required). +# # ## Please note that this is sensitive data! +# # private_key = "your_coralogix_key" +# # +# # ## Application and subsystem names for the metrics (required) +# # application = "$NAMESPACE" +# # subsystem = "$HOSTNAME" +# +# ## Additional OpenTelemetry resource attributes +# # [outputs.opentelemetry.attributes] +# # "service.name" = "demo" +# +# ## Additional gRPC request metadata +# # [outputs.opentelemetry.headers] +# # key1 = "value1" + + +# # Configuration for OpenTSDB server to send metrics to +# [[outputs.opentsdb]] +# ## prefix for metrics keys +# prefix = "my.specific.prefix." +# +# ## DNS name of the OpenTSDB server +# ## Using "opentsdb.example.com" or "tcp://opentsdb.example.com" will use the +# ## telnet API. "http://opentsdb.example.com" will use the Http API. +# host = "opentsdb.example.com" +# +# ## Port of the OpenTSDB server +# port = 4242 +# +# ## Number of data points to send to OpenTSDB in Http requests. +# ## Not used with telnet API. +# http_batch_size = 50 +# +# ## URI Path for Http requests to OpenTSDB. +# ## Used in cases where OpenTSDB is located behind a reverse proxy. +# http_path = "/api/put" +# +# ## Debug true - Prints OpenTSDB communication +# debug = false +# +# ## Separator separates measurement name from field +# separator = "_" + + +# # A plugin that writes metrics to parquet files +# [[outputs.parquet]] +# ## Directory to write parquet files in. If a file already exists the output +# ## will attempt to continue using the existing file. +# # directory = "." +# +# ## Files are rotated after the time interval specified. When set to 0 no time +# ## based rotation is performed. +# # rotation_interval = "0h" +# +# ## Timestamp field name +# ## Field name to use to store the timestamp. If set to an empty string, then +# ## the timestamp is omitted. +# # timestamp_field_name = "timestamp" + + +# # Publishes metrics to a postgresql database +# [[outputs.postgresql]] +# ## Specify connection address via the standard libpq connection string: +# ## host=... user=... password=... sslmode=... dbname=... +# ## Or a URL: +# ## postgres://[user[:password]]@localhost[/dbname]?sslmode=[disable|verify-ca|verify-full] +# ## See https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING +# ## +# ## All connection parameters are optional. Environment vars are also supported. +# ## e.g. PGPASSWORD, PGHOST, PGUSER, PGDATABASE +# ## All supported vars can be found here: +# ## https://www.postgresql.org/docs/current/libpq-envars.html +# ## +# ## Non-standard parameters: +# ## pool_max_conns (default: 1) - Maximum size of connection pool for parallel (per-batch per-table) inserts. +# ## pool_min_conns (default: 0) - Minimum size of connection pool. +# ## pool_max_conn_lifetime (default: 0s) - Maximum connection age before closing. +# ## pool_max_conn_idle_time (default: 0s) - Maximum idle time of a connection before closing. +# ## pool_health_check_period (default: 0s) - Duration between health checks on idle connections. +# # connection = "" +# +# ## Postgres schema to use. +# # schema = "public" +# +# ## Store tags as foreign keys in the metrics table. Default is false. +# # tags_as_foreign_keys = false +# +# ## Suffix to append to table name (measurement name) for the foreign tag table. +# # tag_table_suffix = "_tag" +# +# ## Deny inserting metrics if the foreign tag can't be inserted. +# # foreign_tag_constraint = false +# +# ## Store all tags as a JSONB object in a single 'tags' column. +# # tags_as_jsonb = false +# +# ## Store all fields as a JSONB object in a single 'fields' column. +# # fields_as_jsonb = false +# +# ## Name of the timestamp column +# ## NOTE: Some tools (e.g. Grafana) require the default name so be careful! +# # timestamp_column_name = "time" +# +# ## Type of the timestamp column +# ## Currently, "timestamp without time zone" and "timestamp with time zone" +# ## are supported +# # timestamp_column_type = "timestamp without time zone" +# +# ## Templated statements to execute when creating a new table. +# # create_templates = [ +# # '''CREATE TABLE {{ .table }} ({{ .columns }})''', +# # ] +# +# ## Templated statements to execute when adding columns to a table. +# ## Set to an empty list to disable. Points containing tags for which there is +# ## no column will be skipped. Points containing fields for which there is no +# ## column will have the field omitted. +# # add_column_templates = [ +# # '''ALTER TABLE {{ .table }} ADD COLUMN IF NOT EXISTS {{ .columns|join ", ADD COLUMN IF NOT EXISTS " }}''', +# # ] +# +# ## Templated statements to execute when creating a new tag table. +# # tag_table_create_templates = [ +# # '''CREATE TABLE {{ .table }} ({{ .columns }}, PRIMARY KEY (tag_id))''', +# # ] +# +# ## Templated statements to execute when adding columns to a tag table. +# ## Set to an empty list to disable. Points containing tags for which there is +# ## no column will be skipped. +# # tag_table_add_column_templates = [ +# # '''ALTER TABLE {{ .table }} ADD COLUMN IF NOT EXISTS {{ .columns|join ", ADD COLUMN IF NOT EXISTS " }}''', +# # ] +# +# ## The postgres data type to use for storing unsigned 64-bit integer values +# ## (Postgres does not have a native unsigned 64-bit integer type). +# ## The value can be one of: +# ## numeric - Uses the PostgreSQL "numeric" data type. +# ## uint8 - Requires pguint extension (https://github.com/petere/pguint) +# # uint64_type = "numeric" +# +# ## When using pool_max_conns > 1, and a temporary error occurs, the query is +# ## retried with an incremental backoff. This controls the maximum duration. +# # retry_max_backoff = "15s" +# +# ## Approximate number of tag IDs to store in in-memory cache (when using +# ## tags_as_foreign_keys). This is an optimization to skip inserting known +# ## tag IDs. Each entry consumes approximately 34 bytes of memory. +# # tag_cache_size = 100000 +# +# ## Cut column names at the given length to not exceed PostgreSQL's +# ## 'identifier length' limit (default: no limit) +# ## (see https://www.postgresql.org/docs/current/limits.html) +# ## Be careful to not create duplicate column names! +# # column_name_length_limit = 0 +# +# ## Enable & set the log level for the Postgres driver. +# # log_level = "warn" # trace, debug, info, warn, error, none + + +# # Configuration for the Prometheus client to spawn +# [[outputs.prometheus_client]] +# ## Address to listen on. +# ## ex: +# ## listen = ":9273" +# ## listen = "vsock://:9273" +# listen = ":9273" +# +# ## Maximum duration before timing out read of the request +# # read_timeout = "10s" +# ## Maximum duration before timing out write of the response +# # write_timeout = "10s" +# +# ## Metric version controls the mapping from Prometheus metrics into Telegraf metrics. +# ## See "Metric Format Configuration" in plugins/inputs/prometheus/README.md for details. +# ## Valid options: 1, 2 +# # metric_version = 1 +# +# ## Use HTTP Basic Authentication. +# # basic_username = "Foo" +# # basic_password = "Bar" +# +# ## If set, the IP Ranges which are allowed to access metrics. +# ## ex: ip_range = ["192.168.0.0/24", "192.168.1.0/30"] +# # ip_range = [] +# +# ## Path to publish the metrics on. +# # path = "/metrics" +# +# ## Expiration interval for each metric. 0 == no expiration +# # expiration_interval = "60s" +# +# ## Collectors to enable, valid entries are "gocollector" and "process". +# ## If unset, both are enabled. +# # collectors_exclude = ["gocollector", "process"] +# +# ## Send string metrics as Prometheus labels. +# ## Unless set to false all string metrics will be sent as labels. +# # string_as_label = true +# +# ## Control how metric names and label names are sanitized. +# ## The default "legacy" keeps ASCII-only Prometheus name rules. +# ## Set to "utf8" to allow UTF-8 metric and label names. +# ## Valid options: "legacy", "utf8" +# # name_sanitization = "legacy" +# +# ## If set, enable TLS with the given certificate. +# # tls_cert = "/etc/ssl/telegraf.crt" +# # tls_key = "/etc/ssl/telegraf.key" +# +# ## Set one or more allowed client CA certificate file names to +# ## enable mutually authenticated TLS connections +# # tls_allowed_cacerts = ["/etc/telegraf/clientca.pem"] +# +# ## Export metric collection time. +# # export_timestamp = false +# +# ## Set custom headers for HTTP responses. +# # http_headers = {"X-Special-Header" = "Special-Value"} +# +# ## Specify the metric type explicitly. +# ## This overrides the metric-type of the Telegraf metric. Globbing is allowed. +# # [outputs.prometheus_client.metric_types] +# # counter = [] +# # gauge = [] + + +# # Send metrics to a Quix data processing pipeline +# [[outputs.quix]] +# ## Endpoint for providing the configuration +# # url = "https://portal-api.platform.quix.io" +# +# ## Workspace and topics to send the metrics to +# workspace = "your_workspace" +# topic = "your_topic" +# +# ## Authentication token created in Quix +# token = "your_auth_token" +# +# ## Amount of time allowed to complete the HTTP request for fetching the config + + +# # Publishes metrics to a redis timeseries server +# [[outputs.redistimeseries]] +# ## The address of the RedisTimeSeries server. +# address = "127.0.0.1:6379" +# +# ## Redis ACL credentials +# # username = "" +# # password = "" +# # database = 0 +# +# ## Timeout for operations such as ping or sending metrics +# # timeout = "10s" +# +# ## Set a time-to-live (TTL) on each Redis key +# ## If set, Redis will expire the key after the specified duration +# ## The TTL is refreshed on every write, so the key only expires +# ## if no new data arrives within the configured period +# ## Disabled by default (no expiry) +# # expire = "" +# +# ## Enable attempt to convert string fields to numeric values +# ## If "false" or in case the string value cannot be converted the string +# ## field will be dropped. +# # convert_string_fields = true +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# # insecure_skip_verify = false + + +# # Send telegraf metrics to file(s) in a remote filesystem +# [[outputs.remotefile]] +# ## Remote location according to https://rclone.org/#providers +# ## Check the backend configuration options and specify them in +# ## [,=[,...,=]]:[root] +# ## for example: +# ## remote = 's3,provider=AWS,access_key_id=...,secret_access_key=...,session_token=...,region=us-east-1:mybucket' +# ## By default, remote is the local current directory +# # remote = "local:" +# +# ## Files to write in the remote location +# ## Each file can be a Golang template for generating the filename from metrics. +# ## See https://pkg.go.dev/text/template for a reference and use the metric +# ## name (`{{.Name}}`), tag values (`{{.Tag "name"}}`), field values +# ## (`{{.Field "name"}}`) or the metric time (`{{.Time}}) to derive the +# ## filename. +# ## The 'files' setting may contain directories relative to the root path +# ## defined in 'remote'. +# files = ['{{.Name}}-{{.Time.Format "2006-01-02"}}'] +# +# ## Use batch serialization format instead of line based delimiting. +# ## The batch format allows for the production of non-line-based output formats +# ## and may more efficiently encode metrics. +# # use_batch_format = false +# +# ## Cache settings +# ## Time to wait for all writes to complete on shutdown of the plugin. +# # final_write_timeout = "10s" +# +# ## Time to wait between writing to a file and uploading to the remote location +# # cache_write_back = "5s" +# +# ## Maximum size of the cache on disk (infinite by default) +# # cache_max_size = -1 +# +# ## Forget files after not being touched for longer than the given time +# ## This is useful to prevent memory leaks when using time-based filenames +# ## as it allows internal structures to be cleaned up. +# ## Note: When writing to a file after is has been forgotten, the file is +# ## treated as a new file which might cause file-headers to be appended +# ## again by certain serializers like CSV. +# ## By default files will be kept indefinitely. +# # forget_files_after = "0s" +# +# ## Data format to output. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# data_format = "influx" +# +# ## Compress output data with the specified algorithm. +# ## If empty, compression will be disabled and files will be plain text. +# ## Supported algorithms are "zstd", "gzip" and "zlib". +# # compression_algorithm = "" +# +# ## Compression level for the algorithm above. +# ## Please note that different algorithms support different levels: +# ## zstd -- supports levels 1, 3, 7 and 11. +# ## gzip -- supports levels 0, 1 and 9. +# ## zlib -- supports levels 0, 1, and 9. +# ## By default the default compression level for each algorithm is used. +# # compression_level = -1 + + +# # Configuration for Riemann to send metrics to +# [[outputs.riemann]] +# ## The full TCP or UDP URL of the Riemann server +# url = "tcp://localhost:5555" +# +# ## Riemann event TTL, floating-point time in seconds. +# ## Defines how long that an event is considered valid for in Riemann +# # ttl = 30.0 +# +# ## Separator to use between measurement and field name in Riemann service name +# ## This does not have any effect if 'measurement_as_attribute' is set to 'true' +# separator = "/" +# +# ## Set measurement name as Riemann attribute 'measurement', instead of prepending it to the Riemann service name +# # measurement_as_attribute = false +# +# ## Send string metrics as Riemann event states. +# ## Unless enabled all string metrics will be ignored +# # string_as_state = false +# +# ## A list of tag keys whose values get sent as Riemann tags. +# ## If empty, all Telegraf tag values will be sent as tags +# # tag_keys = ["telegraf","custom_tag"] +# +# ## Additional Riemann tags to send. +# # tags = ["telegraf-output"] +# +# ## Description for Riemann event +# # description_text = "metrics collected from telegraf" +# +# ## Riemann client write timeout, defaults to "5s" if not set. +# # timeout = "5s" + + +# # Send aggregate metrics to Sensu Monitor +# [[outputs.sensu]] +# ## BACKEND API URL is the Sensu Backend API root URL to send metrics to +# ## (protocol, host, and port only). The output plugin will automatically +# ## append the corresponding backend API path +# ## /api/core/v2/namespaces/:entity_namespace/events/:entity_name/:check_name). +# ## +# ## Backend Events API reference: +# ## https://docs.sensu.io/sensu-go/latest/api/events/ +# ## +# ## AGENT API URL is the Sensu Agent API root URL to send metrics to +# ## (protocol, host, and port only). The output plugin will automatically +# ## append the correspeonding agent API path (/events). +# ## +# ## Agent API Events API reference: +# ## https://docs.sensu.io/sensu-go/latest/api/events/ +# ## +# ## NOTE: if backend_api_url and agent_api_url and api_key are set, the output +# ## plugin will use backend_api_url. If backend_api_url and agent_api_url are +# ## not provided, the output plugin will default to use an agent_api_url of +# ## http://127.0.0.1:3031 +# ## +# # backend_api_url = "http://127.0.0.1:8080" +# # agent_api_url = "http://127.0.0.1:3031" +# +# ## API KEY is the Sensu Backend API token +# ## Generate a new API token via: +# ## +# ## $ sensuctl cluster-role create telegraf --verb create --resource events,entities +# ## $ sensuctl cluster-role-binding create telegraf --cluster-role telegraf --group telegraf +# ## $ sensuctl user create telegraf --group telegraf --password REDACTED +# ## $ sensuctl api-key grant telegraf +# ## +# ## For more information on Sensu RBAC profiles & API tokens, please visit: +# ## - https://docs.sensu.io/sensu-go/latest/reference/rbac/ +# ## - https://docs.sensu.io/sensu-go/latest/reference/apikeys/ +# ## +# # api_key = "${SENSU_API_KEY}" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Timeout for HTTP message +# # timeout = "5s" +# +# ## HTTP Content-Encoding for write request body, can be set to "gzip" to +# ## compress body or "identity" to apply no encoding. +# # content_encoding = "identity" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Sensu Event details +# ## +# ## Below are the event details to be sent to Sensu. The main portions of the +# ## event are the check, entity, and metrics specifications. For more information +# ## on Sensu events and its components, please visit: +# ## - Events - https://docs.sensu.io/sensu-go/latest/reference/events +# ## - Checks - https://docs.sensu.io/sensu-go/latest/reference/checks +# ## - Entities - https://docs.sensu.io/sensu-go/latest/reference/entities +# ## - Metrics - https://docs.sensu.io/sensu-go/latest/reference/events#metrics +# ## +# ## Check specification +# ## The check name is the name to give the Sensu check associated with the event +# ## created. This maps to check.metadata.name in the event. +# [outputs.sensu.check] +# name = "telegraf" +# +# ## Entity specification +# ## Configure the entity name and namespace, if necessary. This will be part of +# ## the entity.metadata in the event. +# ## +# ## NOTE: if the output plugin is configured to send events to a +# ## backend_api_url and entity_name is not set, the value returned by +# ## os.Hostname() will be used; if the output plugin is configured to send +# ## events to an agent_api_url, entity_name and entity_namespace are not used. +# # [outputs.sensu.entity] +# # name = "server-01" +# # namespace = "default" +# +# ## Metrics specification +# ## Configure the tags for the metrics that are sent as part of the Sensu event +# # [outputs.sensu.tags] +# # source = "telegraf" +# +# ## Configure the handler(s) for processing the provided metrics +# # [outputs.sensu.metrics] +# # handlers = ["influxdb","elasticsearch"] + + +# # Send metrics and events to SignalFx +# [[outputs.signalfx]] +# ## SignalFx Org Access Token +# access_token = "my-secret-token" +# +# ## The SignalFx realm that your organization resides in +# signalfx_realm = "us9" # Required if ingest_url is not set +# +# ## You can optionally provide a custom ingest url instead of the +# ## signalfx_realm option above if you are using a gateway or proxy +# ## instance. This option takes precedence over signalfx_realm. +# ingest_url = "https://my-custom-ingest/" +# +# ## Event typed metrics are omitted by default, +# ## If you require an event typed metric you must specify the +# ## metric name in the following list. +# included_event_names = ["plugin.metric_name"] + + +# # Generic socket writer capable of handling multiple socket types. +# [[outputs.socket_writer]] +# ## URL to connect to +# # address = "tcp://127.0.0.1:8094" +# # address = "tcp://example.com:http" +# # address = "tcp4://127.0.0.1:8094" +# # address = "tcp6://127.0.0.1:8094" +# # address = "tcp6://[2001:db8::1]:8094" +# # address = "udp://127.0.0.1:8094" +# # address = "udp4://127.0.0.1:8094" +# # address = "udp6://127.0.0.1:8094" +# # address = "unix:///tmp/telegraf.sock" +# # address = "unixgram:///tmp/telegraf.sock" +# # address = "vsock://cid:port" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Period between keep alive probes. +# ## Only applies to TCP sockets. +# ## 0 disables keep alive probes. +# ## Defaults to the OS configuration. +# # keep_alive_period = "5m" +# +# ## Content encoding for message payloads, can be set to "gzip" or to +# ## "identity" to apply no encoding. +# ## +# # content_encoding = "identity" +# +# ## Data format to generate. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" + + +# # Save metrics to an SQL Database +# [[outputs.sql]] +# ## Database driver +# ## Valid options: mssql (Microsoft SQL Server), mysql (MySQL), pgx (Postgres), +# ## sqlite (SQLite3), snowflake (snowflake.com) clickhouse (ClickHouse) +# driver = "" +# +# ## Data source name +# ## The format of the data source name is different for each database driver. +# ## See the plugin readme for details. +# data_source_name = "" +# +# ## Timestamp column name, set to empty to ignore the timestamp +# # timestamp_column = "timestamp" +# +# ## Table creation template +# ## Available template variables: +# ## {TABLE} - table name as a quoted identifier +# ## {TABLELITERAL} - table name as a quoted string literal +# ## {COLUMNS} - column definitions (list of quoted identifiers and types) +# ## {TAG_COLUMN_NAMES} - tag column definitions (list of quoted identifiers) +# ## {TIMESTAMP_COLUMN_NAME} - the name of the time stamp column, as configured above +# # table_template = "CREATE TABLE {TABLE}({COLUMNS})" +# ## NOTE: For the clickhouse driver the default is: +# # table_template = "CREATE TABLE {TABLE}({COLUMNS}) ORDER BY ({TAG_COLUMN_NAMES}, {TIMESTAMP_COLUMN_NAME})" +# +# ## Table existence check template +# ## Available template variables: +# ## {TABLE} - tablename as a quoted identifier +# # table_exists_template = "SELECT 1 FROM {TABLE} LIMIT 1" +# +# ## Table update template, available template variables: +# ## {TABLE} - table name as a quoted identifier +# ## {COLUMN} - column definition (quoted identifier and type) +# ## NOTE: Ensure the user (you're using to write to the database) has necessary permissions +# ## +# ## Use the following setting for automatically adding columns: +# ## table_update_template = "ALTER TABLE {TABLE} ADD COLUMN {COLUMN}" +# # table_update_template = "" +# +# ## Initialization SQL +# # init_sql = "" +# +# ## Send metrics with the same columns and the same table as batches using prepared statements +# # batch_transactions = false +# +# ## Maximum amount of time a connection may be idle. "0s" means connections are +# ## never closed due to idle time. +# # connection_max_idle_time = "0s" +# +# ## Maximum amount of time a connection may be reused. "0s" means connections +# ## are never closed due to age. +# # connection_max_lifetime = "0s" +# +# ## Maximum number of connections in the idle connection pool. 0 means unlimited. +# # connection_max_idle = 2 +# +# ## Maximum number of open connections to the database. 0 means unlimited. +# # connection_max_open = 0 +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Metric type to SQL type conversion +# ## The values on the left are the data types Telegraf has and the values on +# ## the right are the data types Telegraf will use when sending to a database. +# ## +# ## The database values used must be data types the destination database +# ## understands. It is up to the user to ensure that the selected data type is +# ## available in the database they are using. Refer to your database +# ## documentation for what data types are available and supported. +# #[outputs.sql.convert] +# # integer = "INT" +# # real = "DOUBLE" +# # text = "TEXT" +# # timestamp = "TIMESTAMP" +# # defaultvalue = "TEXT" +# # unsigned = "UNSIGNED" +# # bool = "BOOL" +# # ## This setting controls the behavior of the unsigned value. By default the +# # ## setting will take the integer value and append the unsigned value to it. The other +# # ## option is "literal", which will use the actual value the user provides to +# # ## the unsigned option. This is useful for a database like ClickHouse where +# # ## the unsigned value should use a value like "uint64". +# # # conversion_style = "unsigned_suffix" + + +# # Configuration for Google Cloud Stackdriver to send metrics to +# [[outputs.stackdriver]] +# ## GCP Project +# project = "erudite-bloom-151019" +# +# ## GCP access token for authorizing calls to Cloud Monitoring APIs +# # token = "@{gcp_auth:token}" +# +# ## Quota Project +# ## Specifies the Google Cloud project that should be billed for metric ingestion. +# ## If omitted, the quota is charged to the service account’s default project. +# ## This is useful when sending metrics to multiple projects using a single service account. +# ## The caller must have the `serviceusage.services.use` permission on the specified project. +# # quota_project = "" +# +# ## The namespace for the metric descriptor +# ## This is optional and users are encouraged to set the namespace as a +# ## resource label instead. If omitted it is not included in the metric name. +# namespace = "telegraf" +# +# ## Metric Type Prefix +# ## The DNS name used with the metric type as a prefix. +# # metric_type_prefix = "custom.googleapis.com" +# +# ## Metric Name Format +# ## Specifies the layout of the metric name, choose from: +# ## * path: 'metric_type_prefix_namespace_name_key' +# ## * official: 'metric_type_prefix/namespace_name_key/kind' +# # metric_name_format = "path" +# +# ## Metric Data Type +# ## By default, telegraf will use whatever type the metric comes in as. +# ## However, for some use cases, forcing int64, may be preferred for values: +# ## * source: use whatever was passed in +# ## * double: preferred datatype to allow queries by PromQL. +# # metric_data_type = "source" +# +# ## Tags as resource labels +# ## Tags defined in this option, when they exist, are added as a resource +# ## label and not included as a metric label. The values from tags override +# ## the values defined under the resource_labels config options. +# # tags_as_resource_label = [] +# +# ## Custom resource type +# # resource_type = "generic_node" +# +# ## Override metric type by metric name +# ## Metric names matching the values here, globbing supported, will have the +# ## metric type set to the corresponding type. +# # metric_counter = [] +# # metric_gauge = [] +# # metric_histogram = [] +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Additional resource labels +# # [outputs.stackdriver.resource_labels] +# # node_id = "$HOSTNAME" +# # namespace = "myapp" +# # location = "eu-north0" + + +# # Configuration for active mq with stomp protocol to send metrics to +# [[outputs.stomp]] +# host = "localhost:61613" +# +# ## Queue name for producer messages +# queueName = "telegraf" +# +# ## Username and password if required by the Active MQ server. +# # username = "" +# # password = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# +# ## Data format to output. +# data_format = "json" + + +# # A plugin that can send metrics to Sumo Logic HTTP metric collector. +# [[outputs.sumologic]] +# ## Unique URL generated for your HTTP Metrics Source. +# ## This is the address to send metrics to. +# # url = "https://events.sumologic.net/receiver/v1/http/" +# +# ## Data format to be used for sending metrics. +# ## This will set the "Content-Type" header accordingly. +# ## Currently supported formats: +# ## * graphite - for Content-Type of application/vnd.sumologic.graphite +# ## * carbon2 - for Content-Type of application/vnd.sumologic.carbon2 +# ## * prometheus - for Content-Type of application/vnd.sumologic.prometheus +# ## +# ## More information can be found at: +# ## https://help.sumologic.com/03Send-Data/Sources/02Sources-for-Hosted-Collectors/HTTP-Source/Upload-Metrics-to-an-HTTP-Source#content-type-headers-for-metrics +# ## +# ## NOTE: +# ## When unset, telegraf will by default use the influx serializer which is currently unsupported +# ## in HTTP Source. +# data_format = "carbon2" +# +# ## Timeout used for HTTP request +# # timeout = "5s" +# +# ## Max HTTP request body size in bytes before compression (if applied). +# ## By default 1MB is recommended. +# ## NOTE: +# ## Bear in mind that in some serializer a metric even though serialized to multiple +# ## lines cannot be split any further so setting this very low might not work +# ## as expected. +# # max_request_body_size = 1000000 +# +# ## Additional, Sumo specific options. +# ## Full list can be found here: +# ## https://help.sumologic.com/03Send-Data/Sources/02Sources-for-Hosted-Collectors/HTTP-Source/Upload-Metrics-to-an-HTTP-Source#supported-http-headers +# +# ## Desired source name. +# ## Useful if you want to override the source name configured for the source. +# # source_name = "" +# +# ## Desired host name. +# ## Useful if you want to override the source host configured for the source. +# # source_host = "" +# +# ## Desired source category. +# ## Useful if you want to override the source category configured for the source. +# # source_category = "" +# +# ## Comma-separated key=value list of dimensions to apply to every metric. +# ## Custom dimensions will allow you to query your metrics at a more granular level. +# # dimensions = "" + + +# # Configuration for Syslog server to send metrics to +# [[outputs.syslog]] +# ## URL to connect to +# ## ex: address = "tcp://127.0.0.1:8094" +# ## ex: address = "tcp4://127.0.0.1:8094" +# ## ex: address = "tcp6://127.0.0.1:8094" +# ## ex: address = "tcp6://[2001:db8::1]:8094" +# ## ex: address = "udp://127.0.0.1:8094" +# ## ex: address = "udp4://127.0.0.1:8094" +# ## ex: address = "udp6://127.0.0.1:8094" +# address = "tcp://127.0.0.1:8094" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Period between keep alive probes. +# ## Only applies to TCP sockets. +# ## 0 disables keep alive probes. +# ## Defaults to the OS configuration. +# # keep_alive_period = "5m" +# +# ## The framing technique with which it is expected that messages are +# ## transported (default = "octet-counting"). Whether the messages come +# ## using the octet-counting (RFC5425#section-4.3.1, RFC6587#section-3.4.1), +# ## or the non-transparent framing technique (RFC6587#section-3.4.2). Must +# ## be one of "octet-counting", "non-transparent". +# # framing = "octet-counting" +# +# ## The trailer to be expected in case of non-transparent framing (default = "LF"). +# ## Must be one of "LF", or "NUL". +# # trailer = "LF" +# +# ## SD-PARAMs settings +# ## Syslog messages can contain key/value pairs within zero or more +# ## structured data sections. For each unrecognized metric tag/field a +# ## SD-PARAMS is created. +# ## +# ## Example: +# ## [[outputs.syslog]] +# ## sdparam_separator = "_" +# ## default_sdid = "default@32473" +# ## sdids = ["foo@123", "bar@456"] +# ## +# ## input => xyzzy,x=y foo@123_value=42,bar@456_value2=84,something_else=1 +# ## output (structured data only) => [foo@123 value=42][bar@456 value2=84][default@32473 something_else=1 x=y] +# +# ## SD-PARAMs separator between the sdid and tag/field key (default = "_") +# # sdparam_separator = "_" +# +# ## Default sdid used for tags/fields that don't contain a prefix defined in +# ## the explicit sdids setting below If no default is specified, no SD-PARAMs +# ## will be used for unrecognized field. +# # default_sdid = "default@32473" +# +# ## List of explicit prefixes to extract from tag/field keys and use as the +# ## SDID, if they match (see above example for more details): +# # sdids = ["foo@123", "bar@456"] +# +# ## Default severity value. Severity and Facility are used to calculate the +# ## message PRI value (RFC5424#section-6.2.1). Used when no metric field +# ## with key "severity_code" is defined. If unset, 5 (notice) is the default +# # default_severity_code = 5 +# +# ## Default facility value. Facility and Severity are used to calculate the +# ## message PRI value (RFC5424#section-6.2.1). Used when no metric field with +# ## key "facility_code" is defined. If unset, 1 (user-level) is the default +# # default_facility_code = 1 +# +# ## Default APP-NAME value (RFC5424#section-6.2.5) +# ## Used when no metric tag with key "appname" is defined. +# ## If unset, "Telegraf" is the default +# # default_appname = "Telegraf" + + +# # Configuration for sending metrics to Amazon Timestream. +# [[outputs.timestream]] +# ## Amazon Region +# region = "us-east-1" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order: +# ## 1) Web identity provider credentials via STS if role_arn and +# ## web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# #access_key = "" +# #secret_key = "" +# #token = "" +# #role_arn = "" +# #web_identity_token_file = "" +# #role_session_name = "" +# #profile = "" +# #shared_credential_file = "" +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default. +# ## ex: endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Timestream database where the metrics will be inserted. +# ## The database must exist prior to starting Telegraf. +# database_name = "yourDatabaseNameHere" +# +# ## Specifies if the plugin should describe the Timestream database upon +# ## starting to validate if it has access, necessary permissions, connection, +# ## etc., as a safety check. If the describe operation fails, the plugin will +# ## not start and therefore the Telegraf agent will not start. +# describe_database_on_start = false +# +# ## Specifies how the data is organized in Timestream. +# ## Valid values are: single-table, multi-table. +# ## When mapping_mode is set to single-table, all of the data is stored in a +# ## single table. When mapping_mode is set to multi-table, the data is +# ## organized and stored in multiple tables. The default is multi-table. +# mapping_mode = "multi-table" +# +# ## Specifies if the plugin should create the table, if it doesn't exist. +# create_table_if_not_exists = true +# +# ## Specifies the Timestream table magnetic store retention period in days. +# ## Check Timestream documentation for more details. +# ## NOTE: This property is valid when create_table_if_not_exists = true. +# create_table_magnetic_store_retention_period_in_days = 365 +# +# ## Specifies the Timestream table memory store retention period in hours. +# ## Check Timestream documentation for more details. +# ## NOTE: This property is valid when create_table_if_not_exists = true. +# create_table_memory_store_retention_period_in_hours = 24 +# +# ## Specifies how the data is written into Timestream. +# ## Valid values are: true, false +# ## When use_multi_measure_records is set to true, all of the tags and fields +# ## are stored as a single row in a Timestream table. +# ## When use_multi_measure_record is set to false, Timestream stores each field +# ## in a separate table row, thereby storing the tags multiple times (once for +# ## each field). The recommended setting is true. The default is false. +# use_multi_measure_records = "false" +# +# ## Specifies the measure_name to use when sending multi-measure records. +# ## NOTE: This property is valid when use_multi_measure_records=true and +# ## mapping_mode=multi-table +# measure_name_for_multi_measure_records = "telegraf_measure" +# +# ## Specifies the name of the table to write data into +# ## NOTE: This property is valid when mapping_mode=single-table. +# # single_table_name = "" +# +# ## Specifies the name of dimension when all of the data is being stored in a +# ## single table and the measurement name is transformed into the dimension +# ## value (see Mapping data from Influx to Timestream for details) +# ## NOTE: This property is valid when mapping_mode=single-table. +# # single_table_dimension_name_for_telegraf_measurement_name = "namespace" +# +# ## Only valid and optional if create_table_if_not_exists = true +# ## Specifies the Timestream table tags. +# ## Check Timestream documentation for more details +# # create_table_tags = { "foo" = "bar", "environment" = "dev"} +# +# ## Specify the maximum number of parallel go routines to ingest/write data +# ## If not specified, defaulted to 1 go routines +# max_write_go_routines = 25 + + +# # Write metrics to Warp 10 +# [[outputs.warp10]] +# # Prefix to add to the measurement. +# prefix = "telegraf." +# +# # URL of the Warp 10 server +# warp_url = "http://localhost:8080" +# +# # Write token to access your app on warp 10 +# token = "Token" +# +# # Warp 10 query timeout +# # timeout = "15s" +# +# ## Print Warp 10 error body +# # print_error_body = false +# +# ## Max string error size +# # max_string_error_size = 511 +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# [[outputs.wavefront]] +# ## URL for Wavefront API or Wavefront proxy instance +# ## Direct Ingestion via Wavefront API requires authentication. See below. +# url = "https://metrics.wavefront.com" +# +# ## Maximum number of metrics to send per HTTP request. This value should be +# ## higher than the `metric_batch_size`. Values higher than 40,000 are not +# ## recommended. +# # http_maximum_batch_size = 10000 +# +# ## Prefix for metrics keys +# # prefix = "my.specific.prefix." +# +# ## Use "value" for name of simple fields +# # simple_fields = false +# +# ## character to use between metric and field name +# # metric_separator = "." +# +# ## Convert metric name paths to use metricSeparator character +# ## When true will convert all _ (underscore) characters in final metric name. +# # convert_paths = true +# +# ## Use Strict rules to sanitize metric and tag names from invalid characters +# ## When enabled forward slash (/) and comma (,) will be accepted +# # use_strict = false +# +# ## Use Regex to sanitize metric and tag names from invalid characters +# ## Regex is more thorough, but significantly slower. +# # use_regex = false +# +# ## Tags to use as the source name for Wavefront ("host" if none is found) +# # source_override = ["hostname", "address", "agent_host", "node_host"] +# +# ## Convert boolean values to numeric values, with false -> 0.0 and true -> 1.0 +# # convert_bool = true +# +# ## Truncate metric tags to a total of 254 characters for the tag name value +# ## Wavefront will reject any data point exceeding this limit if not truncated +# ## Defaults to 'false' to provide backwards compatibility. +# # truncate_tags = false +# +# ## Flush the internal buffers after each batch. This effectively bypasses the +# ## background sending of metrics normally done by the Wavefront SDK. This can +# ## be used if you are experiencing buffer overruns. The sending of metrics +# ## will block for a longer time, but this will be handled gracefully by +# ## internal buffering in Telegraf. +# # immediate_flush = true +# +# ## Send internal metrics (starting with `~sdk.go`) for valid, invalid, and +# ## dropped metrics +# # send_internal_metrics = true +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## HTTP Timeout +# # timeout="10s" +# +# ## MaxIdleConns controls the maximum number of idle (keep-alive) connections +# ## across all hosts. Zero means unlimited. +# # max_idle_conn = 0 +# +# ## MaxIdleConnsPerHost, if non-zero, controls the maximum idle (keep-alive) +# ## connections to keep per-host. If zero, DefaultMaxIdleConnsPerHost is used. +# # max_idle_conn_per_host = 2 +# +# ## Idle (keep-alive) connection timeout +# # idle_conn_timeout = 0 +# +# ## Authentication for Direct Ingestion. +# ## Direct Ingestion requires one of: `token`,`auth_csp_api_token`, or +# ## `auth_csp_client_credentials` (see https://docs.wavefront.com/csp_getting_started.html) +# ## to learn more about using CSP credentials with Wavefront. +# ## Not required if using a Wavefront proxy. +# +# ## Wavefront API Token Authentication, ignored if using a Wavefront proxy +# ## 1. Click the gear icon at the top right in the Wavefront UI. +# ## 2. Click your account name (usually your email) +# ## 3. Click *API access*. +# # token = "YOUR_TOKEN" +# +# ## Base URL used for authentication, ignored if using a Wavefront proxy or a +# ## Wavefront API token. +# # auth_csp_base_url=https://console.cloud.vmware.com +# +# ## CSP API Token Authentication, ignored if using a Wavefront proxy +# # auth_csp_api_token=CSP_API_TOKEN_HERE +# +# ## CSP Client Credentials Authentication Information, ignored if using a +# ## Wavefront proxy. +# ## See also: https://docs.wavefront.com/csp_getting_started.html#whats-a-server-to-server-app +# # [outputs.wavefront.auth_csp_client_credentials] +# # app_id=CSP_APP_ID_HERE +# # app_secret=CSP_APP_SECRET_HERE +# # org_id=CSP_ORG_ID_HERE + + +# # A plugin that can transmit metrics over WebSocket. +# [[outputs.websocket]] +# ## URL is the address to send metrics to. Make sure ws or wss scheme is used. +# url = "ws://127.0.0.1:3000/telegraf" +# +# ## Timeouts (make sure read_timeout is larger than server ping interval or set to zero). +# # connect_timeout = "30s" +# # write_timeout = "30s" +# # read_timeout = "30s" +# +# ## Optionally turn on using text data frames (binary by default). +# # use_text_frames = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# ## Optional SOCKS5 proxy to use +# # socks5_enabled = true +# # socks5_address = "127.0.0.1:1080" +# # socks5_username = "alice" +# # socks5_password = "pass123" +# +# ## Optional HTTP proxy to use +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## Data format to output. +# ## Each data format has it's own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md +# # data_format = "influx" +# +# ## NOTE: Due to the way TOML is parsed, tables must be at the END of the +# ## plugin definition, otherwise additional config options are read as part of +# ## the table +# +# ## Additional HTTP Upgrade headers +# # [outputs.websocket.headers] +# # Authorization = "Bearer " + + +# # Send aggregated metrics to Yandex.Cloud Monitoring +# [[outputs.yandex_cloud_monitoring]] +# ## Timeout for HTTP writes. +# # timeout = "20s" +# +# ## Yandex.Cloud monitoring API endpoint. Normally should not be changed +# # endpoint_url = "https://monitoring.api.cloud.yandex.net/monitoring/v2/data/write" +# +# ## All user metrics should be sent with "custom" service specified. Normally should not be changed +# # service = "custom" + + +# # Send metrics to Zabbix +# [[outputs.zabbix]] +# ## Address and (optional) port of the Zabbix server +# address = "zabbix.example.com:10051" +# +# ## Send metrics as type "Zabbix agent (active)" +# # agent_active = false +# +# ## Add prefix to all keys sent to Zabbix. +# # key_prefix = "telegraf." +# +# ## Name of the tag that contains the host name. Used to set the host in Zabbix. +# ## If the tag is not found, use the hostname of the system running Telegraf. +# # host_tag = "host" +# +# ## Skip measurement prefix to all keys sent to Zabbix. +# # skip_measurement_prefix = false +# +# ## This field will be sent as HostMetadata to Zabbix Server to autoregister the host. +# ## To enable this feature, this option must be set to a value other than "". +# # autoregister = "" +# +# ## Interval to resend auto-registration data to Zabbix. +# ## Only applies if autoregister feature is enabled. +# ## This value is a lower limit, the actual resend should be triggered by the next flush interval. +# # autoregister_resend_interval = "30m" +# +# ## Interval to send LLD data to Zabbix. +# ## This value is a lower limit, the actual resend should be triggered by the next flush interval. +# # lld_send_interval = "10m" +# +# ## Interval to delete stored LLD known data and start capturing it again. +# ## This value is a lower limit, the actual resend should be triggered by the next flush interval. +# # lld_clear_interval = "1h" + + +############################################################################### +# PROCESSOR PLUGINS # +############################################################################### + + +# # Attach AWS EC2 metadata to metrics +# [[processors.aws_ec2]] +# ## Instance identity document tags to attach to metrics. +# ## For more information see: +# ## https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-identity-documents.html +# ## +# ## Available tags: +# ## * accountId +# ## * architecture +# ## * availabilityZone +# ## * billingProducts +# ## * imageId +# ## * instanceId +# ## * instanceType +# ## * kernelId +# ## * pendingTime +# ## * privateIp +# ## * ramdiskId +# ## * region +# ## * version +# # imds_tags = [] +# +# ## EC2 instance tags retrieved with DescribeTags action. +# ## In case tag is empty upon retrieval it's omitted when tagging metrics. +# ## Note that in order for this to work, role attached to EC2 instance or AWS +# ## credentials available from the environment must have a policy attached, that +# ## allows ec2:DescribeTags. +# ## +# ## For more information see: +# ## https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_DescribeTags.html +# # ec2_tags = [] +# +# ## Paths to instance metadata information to attach to the metrics. +# ## Specify the full path without the base-path e.g. `tags/instance/Name`. +# ## +# ## For more information see: +# ## https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html +# # metadata_paths = [] +# +# ## Allows to convert metadata tag-names to canonical names representing the +# ## full path with slashes ('/') being replaces with underscores. By default, +# ## only the last path element is used to name the tag. +# # canonical_metadata_tags = false +# +# ## Timeout for http requests made by against aws ec2 metadata endpoint. +# # timeout = "10s" +# +# ## ordered controls whether or not the metrics need to stay in the same order +# ## this plugin received them in. If false, this plugin will change the order +# ## with requests hitting cached results moving through immediately and not +# ## waiting on slower lookups. This may cause issues for you if you are +# ## depending on the order of metrics staying the same. If so, set this to true. +# ## Keeping the metrics ordered may be slightly slower. +# # ordered = false +# +# ## max_parallel_calls is the maximum number of AWS API calls to be in flight +# ## at the same time. +# ## It's probably best to keep this number fairly low. +# # max_parallel_calls = 10 +# +# ## cache_ttl determines how long each cached item will remain in the cache before +# ## it is removed and subsequently needs to be queried for from the AWS API. By +# ## default, no items are cached. +# # cache_ttl = "0s" +# +# ## tag_cache_size determines how many of the values which are found in imds_tags +# ## or ec2_tags will be kept in memory for faster lookup on successive processing +# ## of metrics. You may want to adjust this if you have excessively large numbers +# ## of tags on your EC2 instances, and you are using the ec2_tags field. This +# ## typically does not need to be changed when using the imds_tags field. +# # tag_cache_size = 1000 +# +# ## log_cache_stats will emit a log line periodically to stdout with details of +# ## cache entries, hits, misses, and evacuations since the last time stats were +# ## emitted. This can be helpful in determining whether caching is being effective +# ## in your environment. Stats are emitted every 30 seconds. By default, this +# ## setting is disabled. + + +# ## Batch metrics into separate batches by adding a tag indicating the batch index. +# [[processors.batch]] +# ## The name of the tag to use for adding the batch index +# batch_tag = "my_batch" +# +# ## The number of batches to create +# batches = 16 +# +# ## Do not assign metrics with an existing batch assignment to a +# ## different batch. +# # skip_existing = false + + +# # Apply metric modifications using override semantics. +# [[processors.clone]] +# ## All modifications on inputs and aggregators can be overridden: +# # name_override = "new_name" +# # name_prefix = "new_name_prefix" +# # name_suffix = "new_name_suffix" +# +# ## Tags to be added (all values must be strings) +# # [processors.clone.tags] +# # additional_tag = "tag_value" + + +# # Convert values to another metric value type +# [[processors.converter]] +# ## Tags to convert +# ## +# ## The table key determines the target type, and the array of key-values +# ## select the keys to convert. The array may contain globs. +# ## = [...] +# [processors.converter.tags] +# measurement = [] +# string = [] +# integer = [] +# unsigned = [] +# boolean = [] +# float = [] +# +# ## Optional tag to use as metric timestamp +# # timestamp = [] +# +# ## Format of the timestamp determined by the tag above. This can be any of +# ## "unix", "unix_ms", "unix_us", "unix_ns", or a valid Golang time format. +# ## It is required, when using the timestamp option. +# # timestamp_format = "" +# +# ## Fields to convert +# ## +# ## The table key determines the target type, and the array of key-values +# ## select the keys to convert. The array may contain globs. +# ## = [...] +# [processors.converter.fields] +# measurement = [] +# tag = [] +# string = [] +# integer = [] +# unsigned = [] +# boolean = [] +# float = [] +# +# ## Optional field to use for converting base64 encoding of IEEE 754 Float32 values +# ## (for example, data_json_content_state_openconfig-platform-psu:output-power":"RKeAAA==") +# ## into a float32 value 1340 +# # base64_ieee_float32 = [] +# +# ## Optional field to use as metric timestamp +# # timestamp = [] +# +# ## Format of the timestamp determined by the field above. This can be any +# ## of "unix", "unix_ms", "unix_us", "unix_ns", or a valid Golang time +# ## format. It is required, when using the timestamp option. +# # timestamp_format = "" + + +# # Compute the cumulative sum of the given fields +# [[processors.cumulative_sum]] +# ## Numerical fields to be processed (accepting wildcards) +# # fields = ["*"] +# +# ## Interval after which metrics are evicted from the cache and the +# ## sum values are reset to zero. A zero or unset value will keep the +# ## metric forever. +# ## It is strongly recommended to set an expiry interval to avoid +# ## growing memory usage when varying metric series are processed. + + +# # Dates measurements, tags, and fields that pass through this filter. +# [[processors.date]] +# ## New tag to create +# tag_key = "month" +# +# ## New field to create (cannot set both field_key and tag_key) +# # field_key = "month" +# +# ## Date format string, must be a representation of the Go "reference time" +# ## which is "Mon Jan 2 15:04:05 -0700 MST 2006". +# date_format = "Jan" +# +# ## If destination is a field, date format can also be one of +# ## "unix", "unix_ms", "unix_us", or "unix_ns", which will insert an integer field. +# # date_format = "unix" +# +# ## Offset duration added to the date string when writing the new tag. +# # date_offset = "0s" +# +# ## Timezone to use when creating the tag or field using a reference time +# ## string. This can be set to one of "UTC", "Local", or to a location name +# ## in the IANA Time Zone database. +# ## example: timezone = "America/Los_Angeles" +# # timezone = "UTC" + + +# # Filter metrics with repeating field values +# [[processors.dedup]] +# ## Maximum time to suppress output +# dedup_interval = "600s" + + +# ## Set default fields and tags on your metric(s) when they are nil or empty +# [[processors.defaults]] +# ## Ensures a set of fields or tags always exists on your metric(s) with their +# ## respective default value. +# ## For any given field/tag pair (key = default), if it's not set, a field/tag +# ## is set on the metric with the specified default. +# ## +# ## A field is considered not set if it is nil on the incoming metric; +# ## or it is not nil but its value is an empty string or is a string +# ## of one or more spaces. +# ## = +# [processors.defaults.fields] +# field_1 = "bar" +# time_idle = 0 +# is_error = true +# ## A tag is considered not set if it is nil on the incoming metric; +# ## or it is not nil but it is empty string or a string of one or +# ## more spaces. +# ## = +# [processors.defaults.tags] +# tag_1 = "foo" + + +# # Map enum values according to given table. +# [[processors.enum]] +# [[processors.enum.mapping]] +# ## Names of the fields to map. Globs accepted. +# fields = ["status"] +# +# ## Name of the tags to map. Globs accepted. +# # tags = ["status"] +# +# ## Destination tag or field to be used for the mapped value. By default the +# ## source tag or field is used, overwriting the original value. +# dest = "status_code" +# +# ## Default value to be used for all values not contained in the mapping +# ## table. When unset and no match is found, the original field will remain +# ## unmodified and the destination tag or field will not be created. +# # default = 0 +# +# ## Table of mappings +# [processors.enum.mapping.value_mappings] +# green = 1 +# amber = 2 +# red = 3 + + +# # Run executable as long-running processor plugin +# [[processors.execd]] +# ## One program to run as daemon. +# ## NOTE: process and each argument should each be their own string +# ## eg: command = ["/path/to/your_program", "arg1", "arg2"] +# command = ["cat"] +# +# ## Environment variables +# ## Array of "key=value" pairs to pass as environment variables +# ## e.g. "KEY=value", "USERNAME=John Doe", +# ## "LD_LIBRARY_PATH=/opt/custom/lib64:/usr/local/libs" +# # environment = [] +# +# ## Delay before the process is restarted after an unexpected termination +# # restart_delay = "10s" +# +# ## Serialization format for communicating with the executed program +# ## Please note that the corresponding data-format must exist both in +# ## parsers and serializers +# # data_format = "influx" + + +# # Performs file path manipulations on tags and fields +# [[processors.filepath]] +# ## Treat the tag value as a path and convert it to its last element, storing the result in a new tag +# # [[processors.filepath.basename]] +# # tag = "path" +# # dest = "basepath" +# +# ## Treat the field value as a path and keep all but the last element of path, typically the path's directory +# # [[processors.filepath.dirname]] +# # field = "path" +# +# ## Treat the tag value as a path, converting it to its the last element without its suffix +# # [[processors.filepath.stem]] +# # tag = "path" +# +# ## Treat the tag value as a path, converting it to the shortest path name equivalent +# ## to path by purely lexical processing +# # [[processors.filepath.clean]] +# # tag = "path" +# +# ## Treat the tag value as a path, converting it to a relative path that is lexically +# ## equivalent to the source path when joined to 'base_path' +# # [[processors.filepath.rel]] +# # tag = "path" +# # base_path = "/var/log" +# +# ## Treat the tag value as a path, replacing each separator character in path with a '/' character. Has only +# ## effect on Windows +# # [[processors.filepath.toslash]] +# # tag = "path" + + +# # Filter metrics by the given criteria +# [[processors.filter]] +# ## Default action if no rule applies +# # default = "pass" +# +# ## Rules to apply on the incoming metrics (multiple rules are possible) +# ## The rules are evaluated in order and the first matching rule is applied. +# ## In case no rule matches the "default" is applied. +# ## All filter criteria in a rule must apply for the rule to match the metric. +# ## The criteria are combined by a logical AND. If a criterion is +# ## omitted, it is NOT applied at all and ignored. +# [[processors.filter.rule]] +# ## List of metric names to match including glob expressions +# # name = [] +# +# ## List of tag key/values pairs to match including glob expressions +# ## ALL given tags keys must exist and at least one value must match +# ## for the metric to match the rule. +# # tags = {} +# +# ## List of field keys to match including glob expressions +# ## At least one field must exist for the metric to match the rule. +# # fields = [] +# +# ## Action to apply for this rule +# ## "pass" will keep the metric and pass it on, while "drop" will remove +# ## the metric +# # action = "drop" + + +# # Add a tag of the network interface name looked up over SNMP by interface number +# [[processors.ifname]] +# ## Name of tag holding the interface number +# # tag = "ifIndex" +# +# ## Name of output tag where service name will be added +# # dest = "ifName" +# +# ## Name of tag of the SNMP agent to request the interface name from +# ## example: agent = "source" +# # agent = "agent" +# +# ## Timeout for each request. +# # timeout = "5s" +# +# ## SNMP version; can be 1, 2, or 3. +# # version = 2 +# +# ## SNMP community string. +# # community = "public" +# +# ## Number of retries to attempt. +# # retries = 3 +# +# ## The GETBULK max-repetitions parameter. +# # max_repetitions = 10 +# +# ## SNMPv3 authentication and encryption options. +# ## +# ## Security Name. +# # sec_name = "myuser" +# ## Authentication protocol; one of "MD5", "SHA", or "". +# # auth_protocol = "MD5" +# ## Authentication password. +# # auth_password = "pass" +# ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". +# # sec_level = "authNoPriv" +# ## Context Name. +# # context_name = "" +# ## Privacy protocol used for encrypted messages; one of "DES", "AES" or "". +# # priv_protocol = "" +# ## Privacy password used for encrypted messages. +# # priv_password = "" +# +# ## max_parallel_lookups is the maximum number of SNMP requests to +# ## make at the same time. +# # max_parallel_lookups = 100 +# +# ## ordered controls whether or not the metrics need to stay in the +# ## same order this plugin received them in. If false, this plugin +# ## may change the order when data is cached. If you need metrics to +# ## stay in order set this to true. keeping the metrics ordered may +# ## be slightly slower +# # ordered = false +# +# ## cache_ttl is the amount of time interface names are cached for a +# ## given agent. After this period elapses if names are needed they +# ## will be retrieved again. +# # cache_ttl = "8h" + + +# # Lookup a key derived from metrics in a static file +# [[processors.lookup]] +# ## List of files containing the lookup-table +# files = ["path/to/lut.json", "path/to/another_lut.json"] +# +# ## Format of the lookup file(s) +# ## Available formats are: +# ## json -- JSON file with 'key: {tag-key: tag-value, ...}' mapping +# ## csv_key_name_value -- CSV file with 'key,tag-key,tag-value,...,tag-key,tag-value' mapping +# ## csv_key_values -- CSV file with a header containing tag-names and +# ## rows with 'key,tag-value,...,tag-value' mappings +# # format = "json" +# +# ## Template for generating the lookup-key from the metric. +# ## This is a Golang template (see https://pkg.go.dev/text/template) to +# ## access the metric name (`{{.Name}}`), a tag value (`{{.Tag "name"}}`) or +# ## a field value (`{{.Field "name"}}`). +# key = '{{.Tag "host"}}' + + +# # Adds noise to numerical fields +# [[processors.noise]] +# ## Specified the type of the random distribution. +# ## Can be "laplacian", "gaussian" or "uniform". +# # type = "laplacian +# +# ## Center of the distribution. +# ## Only used for Laplacian and Gaussian distributions. +# # mu = 0.0 +# +# ## Scale parameter for the Laplacian or Gaussian distribution +# # scale = 1.0 +# +# ## Upper and lower bound of the Uniform distribution +# # min = -1.0 +# # max = 1.0 +# +# ## Apply the noise only to numeric fields matching the filter criteria below. +# ## Excludes takes precedence over includes. +# # include_fields = [] +# # exclude_fields = [] + + +# # Apply metric modifications using override semantics. +# [[processors.override]] +# ## All modifications on inputs and aggregators can be overridden: +# # name_override = "new_name" +# # name_prefix = "new_name_prefix" +# # name_suffix = "new_name_suffix" +# +# ## Tags to be added (all values must be strings) +# # [processors.override.tags] +# # additional_tag = "tag_value" + + +# # Parse a value in a specified field(s)/tag(s) and add the result in a new metric +# [[processors.parser]] +# ## The name of the fields whose value will be parsed. +# parse_fields = ["message"] +# +# ## Fields to base64 decode. +# ## These fields do not need to be specified in parse_fields. +# ## Fields specified here will have base64 decode applied to them. +# # parse_fields_base64 = [] +# +# ## The name of the tags whose value will be parsed. +# # parse_tags = [] +# +# ## If true, incoming metrics are not emitted. +# # drop_original = false +# +# ## Merge Behavior +# ## Only has effect when drop_original is set to false. Possible options +# ## include: +# ## * override: emitted metrics are merged by overriding the original metric +# ## using the newly parsed metrics, but retains the original metric +# ## timestamp. +# ## * override-with-timestamp: the same as "override", but the timestamp is +# ## set based on the new metrics if present. +# # merge = "" +# +# ## The dataformat to be read from files +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" + + +# # Rotate a single valued metric into a multi field metric +# [[processors.pivot]] +# ## Tag to use for naming the new field. +# tag_key = "name" +# ## Field to use as the value of the new field. +# value_key = "value" + + +# # Given a tag/field of a TCP or UDP port number, add a tag/field of the service name looked up in the system services file +# [[processors.port_name]] +# ## Name of tag holding the port number +# # tag = "port" +# ## Or name of the field holding the port number +# # field = "port" +# +# ## Name of output tag or field (depending on the source) where service name will be added +# # dest = "service" +# +# ## Default tcp or udp +# # default_protocol = "tcp" +# +# ## Tag containing the protocol (tcp or udp, case-insensitive) +# # protocol_tag = "proto" +# +# ## Field containing the protocol (tcp or udp, case-insensitive) +# # protocol_field = "proto" + + +# # Print all metrics that pass through this filter. +# [[processors.printer]] +# ## Maximum line length in bytes. Useful only for debugging. +# # influx_max_line_bytes = 0 +# +# ## When true, fields will be output in ascending lexical order. Enabling +# ## this option will result in decreased performance and is only recommended +# ## when you need predictable ordering while debugging. +# # influx_sort_fields = false +# +# ## When true, Telegraf will output unsigned integers as unsigned values, +# ## for example `42u`. You will need a version of InfluxDB supporting unsigned +# ## integer values. Enabling this option will result in field type errors if +# ## existing data has been written. +# # influx_uint_support = false +# +# ## When true, Telegraf will omit the timestamp on data to allow InfluxDB +# ## to set the timestamp of the data during ingestion. This is generally NOT +# ## what you want as it can lead to data points captured at different times +# ## getting omitted due to similar data. +# # influx_omit_timestamp = false + + +# # Transforms tag and field values as well as measurement, tag and field names with regex pattern +# [[processors.regex]] +# namepass = ["nginx_requests"] +# +# ## Tag value conversion(s). Multiple instances are allowed. +# [[processors.regex.tags]] +# ## Tag(s) to process with optional glob expressions such as '*'. +# key = "resp_code" +# ## Regular expression to match the tag value. If the value doesn't +# ## match the tag is ignored. +# pattern = "^(\\d)\\d\\d$" +# ## Replacement expression defining the value of the target tag. You can +# ## use regexp groups or named groups e.g. ${1} references the first group. +# replacement = "${1}xx" +# ## Name of the target tag defaulting to 'key' if not specified. +# ## In case of wildcards being used in `key` the currently processed +# ## tag-name is used as target. +# # result_key = "method" +# ## Appends the replacement to the target tag instead of overwriting it when +# ## set to true. +# # append = false +# +# ## Field value conversion(s). Multiple instances are allowed. +# [[processors.regex.fields]] +# ## Field(s) to process with optional glob expressions such as '*'. +# key = "request" +# ## Regular expression to match the field value. If the value doesn't +# ## match or the field doesn't contain a string the field is ignored. +# pattern = "^/api(?P/[\\w/]+)\\S*" +# ## Replacement expression defining the value of the target field. You can +# ## use regexp groups or named groups e.g. ${method} references the group +# ## named "method". +# replacement = "${method}" +# ## Name of the target field defaulting to 'key' if not specified. +# ## In case of wildcards being used in `key` the currently processed +# ## field-name is used as target. +# # result_key = "method" +# +# ## Rename metric fields +# [[processors.regex.field_rename]] +# ## Regular expression to match on the field name +# pattern = "^search_(\\w+)d$" +# ## Replacement expression defining the name of the new field +# replacement = "${1}" +# ## If the new field name already exists, you can either "overwrite" the +# ## existing one with the value of the renamed field OR you can "keep" +# ## both the existing and source field. +# # result_key = "keep" +# +# ## Rename metric tags +# [[processors.regex.tag_rename]] +# ## Regular expression to match on a tag name +# pattern = "^search_(\\w+)d$" +# ## Replacement expression defining the name of the new tag +# replacement = "${1}" +# ## If the new tag name already exists, you can either "overwrite" the +# ## existing one with the value of the renamed tag OR you can "keep" +# ## both the existing and source tag. +# # result_key = "keep" +# +# ## Rename metrics +# [[processors.regex.metric_rename]] +# ## Regular expression to match on an metric name +# pattern = "^search_(\\w+)d$" +# ## Replacement expression defining the new name of the metric +# replacement = "${1}" + + +# # Rename measurements, tags, and fields that pass through this filter. +# [[processors.rename]] +# ## Specify one sub-table per rename operation. +# [[processors.rename.replace]] +# measurement = "network_interface_throughput" +# dest = "throughput" +# +# [[processors.rename.replace]] +# tag = "hostname" +# dest = "host" +# +# [[processors.rename.replace]] +# field = "lower" +# dest = "min" +# +# [[processors.rename.replace]] +# field = "upper" +# dest = "max" + + +# # ReverseDNS does a reverse lookup on IP addresses to retrieve the DNS name +# [[processors.reverse_dns]] +# ## For optimal performance, you may want to limit which metrics are passed to this +# ## processor. eg: +# ## namepass = ["my_metric_*"] +# +# ## cache_ttl is how long the dns entries should stay cached for. +# ## generally longer is better, but if you expect a large number of diverse lookups +# ## you'll want to consider memory use. +# cache_ttl = "24h" +# +# ## lookup_timeout is how long should you wait for a single dns request to respond. +# ## this is also the maximum acceptable latency for a metric travelling through +# ## the reverse_dns processor. After lookup_timeout is exceeded, a metric will +# ## be passed on unaltered. +# ## multiple simultaneous resolution requests for the same IP will only make a +# ## single rDNS request, and they will all wait for the answer for this long. +# lookup_timeout = "3s" +# +# ## max_parallel_lookups is the maximum number of dns requests to be in flight +# ## at the same time. Requesting hitting cached values do not count against this +# ## total, and neither do mulptiple requests for the same IP. +# ## It's probably best to keep this number fairly low. +# max_parallel_lookups = 10 +# +# ## ordered controls whether or not the metrics need to stay in the same order +# ## this plugin received them in. If false, this plugin will change the order +# ## with requests hitting cached results moving through immediately and not +# ## waiting on slower lookups. This may cause issues for you if you are +# ## depending on the order of metrics staying the same. If so, set this to true. +# ## keeping the metrics ordered may be slightly slower. +# ordered = false +# +# [[processors.reverse_dns.lookup]] +# ## get the ip from the field "source_ip", and put the result in the field "source_name" +# field = "source_ip" +# dest = "source_name" +# +# [[processors.reverse_dns.lookup]] +# ## get the ip from the tag "destination_ip", and put the result in the tag +# ## "destination_name". +# tag = "destination_ip" +# dest = "destination_name" +# +# ## If you would prefer destination_name to be a field instead, you can use a +# ## processors.converter after this one, specifying the order attribute. + + +# # Round numerical fields +# [[processors.round]] +# ## Precision to round to. +# ## A positive number indicates rounding to the right of the decimal separator (the fractional part). +# ## A negative number indicates rounding to the left of the decimal separator. +# # precision = 0 +# +# ## Round only numeric fields matching the filter criteria below. +# ## Excludes takes precedence over includes. +# # include_fields = ["*"] +# # exclude_fields = [] + + +# # Add the S2 Cell ID as a tag based on latitude and longitude fields +# [[processors.s2geo]] +# ## The name of the lat and lon fields containing WGS-84 latitude and +# ## longitude in decimal degrees. +# # lat_field = "lat" +# # lon_field = "lon" +# +# ## New tag to create +# # tag_key = "s2_cell_id" +# +# ## Cell level (see https://s2geometry.io/resources/s2cell_statistics.html) +# # cell_level = 9 + + +# # Scale values with a predefined range to a different output range. +# [[processors.scale]] +# ## It is possible to define multiple different scaling that can be applied +# ## do different sets of fields. Each scaling expects the following +# ## arguments: +# ## - input_minimum: Minimum expected input value +# ## - input_maximum: Maximum expected input value +# ## - output_minimum: Minimum desired output value +# ## - output_maximum: Maximum desired output value +# ## alternatively you can specify a scaling with factor and offset +# ## - factor: factor to scale the input value with +# ## - offset: additive offset for value after scaling +# ## - fields: a list of field names (or filters) to apply this scaling to +# +# ## Example: Scaling with minimum and maximum values +# # [[processors.scale.scaling]] +# # input_minimum = 0.0 +# # input_maximum = 1.0 +# # output_minimum = 0.0 +# # output_maximum = 100.0 +# # fields = ["temperature1", "temperature2"] +# +# ## Example: Scaling with factor and offset +# # [[processors.scale.scaling]] +# # factor = 10.0 +# # offset = -5.0 +# # fields = ["voltage*"] + + +# # Lookup extra tags via SNMP based on the table index +# [[processors.snmp_lookup]] +# ## Name of tag of the SNMP agent to do the lookup on +# # agent_tag = "source" +# +# ## Name of tag holding the table row index +# # index_tag = "index" +# +# ## Timeout for each request. +# # timeout = "5s" +# +# ## SNMP version; can be 1, 2, or 3. +# # version = 2 +# +# ## SNMP community string. +# # community = "public" +# +# ## Number of retries to attempt. +# # retries = 3 +# +# ## The GETBULK max-repetitions parameter. +# # max_repetitions = 10 +# +# ## SNMPv3 authentication and encryption options. +# ## +# ## Security Name. +# # sec_name = "myuser" +# ## Authentication protocol; one of "MD5", "SHA", or "". +# # auth_protocol = "MD5" +# ## Authentication password. +# # auth_password = "pass" +# ## Security Level; one of "noAuthNoPriv", "authNoPriv", or "authPriv". +# # sec_level = "authNoPriv" +# ## Context Name. +# # context_name = "" +# ## Privacy protocol used for encrypted messages; one of "DES", "AES" or "". +# # priv_protocol = "" +# ## Privacy password used for encrypted messages. +# # priv_password = "" +# +# ## The maximum number of SNMP requests to make at the same time. +# # max_parallel_lookups = 16 +# +# ## The amount of agents to cache entries for. If limit is reached, +# ## oldest will be removed first. 0 means no limit. +# # max_cache_entries = 100 +# +# ## Control whether the metrics need to stay in the same order this plugin +# ## received them in. If false, this plugin may change the order when data is +# ## cached. If you need metrics to stay in order set this to true. Keeping the +# ## metrics ordered may be slightly slower. +# # ordered = false +# +# ## The amount of time entries are cached for a given agent. After this period +# ## elapses if tags are needed they will be retrieved again. +# # cache_ttl = "8h" +# +# ## Minimum time between requests to an agent in case an index could not be +# ## resolved. If set to zero no request on missing indices will be triggered. +# # min_time_between_updates = "5m" +# +# ## List of tags to be looked up. +# [[processors.snmp_lookup.tag]] +# ## Object identifier of the variable as a numeric or textual OID. +# oid = "IF-MIB::ifName" +# +# ## Name of the tag to create. If not specified, it defaults to the value of 'oid'. +# ## If 'oid' is numeric, an attempt to translate the numeric OID into a textual OID +# ## will be made. +# # name = "" +# +# ## Apply one of the following conversions to the variable value: +# ## ipaddr: Convert the value to an IP address. +# ## enum: Convert the value according to its syntax in the MIB. +# ## displayhint: Format the value according to the textual convention in the MIB. +# ## +# # conversion = "" + + +# # Split a metric into one or more metrics with the specified field(s)/tag(s) +# [[processors.split]] +# ## Keeps the original metric by default +# # drop_original = false +# +# ## Template for an output metric +# ## Users can define multiple templates to split the original metric into +# ## multiple, potentially overlapping, metrics. +# [[processors.split.template]] +# ## New metric name +# name = "" +# +# ## List of tag keys for this metric template, accepts globs, e.g. "*" +# tags = [] +# +# ## List of field keys for this metric template, accepts globs, e.g. "*" +# fields = [] + + +# # Process metrics using a Starlark script +# [[processors.starlark]] +# ## The Starlark source can be set as a string in this configuration file, or +# ## by referencing a file containing the script. Only one source or script +# ## should be set at once. +# +# ## Source of the Starlark script. +# source = ''' +# def apply(metric): +# return metric +# ''' +# +# ## File containing a Starlark script. +# # script = "/usr/local/bin/myscript.star" +# +# ## The constants of the Starlark script. +# # [processors.starlark.constants] +# # max_size = 10 +# # threshold = 0.75 +# # default_name = "Julia" +# # debug_mode = true + + +# # Perform string processing on tags, fields, and measurements +# [[processors.strings]] +# ## Convert a field value to lowercase and store in a new field +# # [[processors.strings.lowercase]] +# # field = "uri_stem" +# # dest = "uri_stem_normalised" +# +# ## Convert a tag value to uppercase +# # [[processors.strings.uppercase]] +# # tag = "method" +# +# ## Convert a field value to titlecase +# # [[processors.strings.titlecase]] +# # field = "status" +# +# ## Trim leading and trailing whitespace using the default cutset +# # [[processors.strings.trim]] +# # field = "message" +# +# ## Trim leading characters in cutset +# # [[processors.strings.trim_left]] +# # field = "message" +# # cutset = "\t" +# +# ## Trim trailing characters in cutset +# # [[processors.strings.trim_right]] +# # field = "message" +# # cutset = "\r\n" +# +# ## Trim the given prefix from the field +# # [[processors.strings.trim_prefix]] +# # field = "my_value" +# # prefix = "my_" +# +# ## Trim the given suffix from the field +# # [[processors.strings.trim_suffix]] +# # field = "read_count" +# # suffix = "_count" +# +# ## Replace all non-overlapping instances of old with new +# # [[processors.strings.replace]] +# # measurement = "*" +# # old = ":" +# # new = "_" +# +# ## Trims strings based on width +# # [[processors.strings.left]] +# # field = "message" +# # width = 10 +# +# ## Decode a base64 encoded utf-8 string +# # [[processors.strings.base64decode]] +# # field = "message" +# +# ## Sanitize a string to ensure it is a valid utf-8 string +# ## Each run of invalid UTF-8 byte sequences is replaced by the replacement string, which may be empty +# # [[processors.strings.valid_utf8]] +# # field = "message" +# # replacement = "" + + +# # Restricts the number of tags that can pass through this filter and chooses which tags to preserve when over the limit. +# [[processors.tag_limit]] +# ## Maximum number of tags to preserve +# limit = 3 +# +# ## List of tags to preferentially preserve +# keep = ["environment", "region"] + + +# # Uses a Go template to create a new tag +# [[processors.template]] +# ## Go template used to create the tag name of the output. In order to +# ## ease TOML escaping requirements, you should use single quotes around +# ## the template string. +# tag = "topic" +# +# ## Go template used to create the tag value of the output. In order to +# ## ease TOML escaping requirements, you should use single quotes around +# ## the template string. +# template = '{{ .Tag "hostname" }}.{{ .Tag "level" }}' + + +# # Convert a timestamp field to other timestamp format +# [[processors.timestamp]] +# ## Timestamp key to convert +# ## Specify the field name that contains the timestamp to convert. The result +# ## will replace the current field value. +# field = "" +# +# ## Timestamp Format +# ## This defines the time layout used to interpret the source timestamp field. +# ## The time must be `unix`, `unix_ms`, `unix_us`, `unix_ns`, or a time in Go +# ## "reference time". For more information on Go "reference time". For more +# ## see: https://golang.org/pkg/time/#Time.Format +# source_timestamp_format = "" +# +# ## Timestamp Timezone +# ## Source timestamp timezone. If not set, assumed to be in UTC. +# ## Options are as follows: +# ## 1. UTC -- or unspecified will return timestamp in UTC +# ## 2. Local -- interpret based on machine localtime +# ## 3. "America/New_York" -- Unix TZ values like those found in +# ## https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# # source_timestamp_timezone = "" +# +# ## Target timestamp format +# ## This defines the destination timestamp format. It also can accept either +# ## `unix`, `unix_ms`, `unix_us`, `unix_ns`, or a time in Go "reference time". +# destination_timestamp_format = "" +# +# ## Target Timestamp Timezone +# ## Source timestamp timezone. If not set, assumed to be in UTC. +# ## Options are as follows: +# ## 1. UTC -- or unspecified will return timestamp in UTC +# ## 2. Local -- interpret based on machine localtime +# ## 3. "America/New_York" -- Unix TZ values like those found in +# ## https://en.wikipedia.org/wiki/List_of_tz_database_time_zones +# # destination_timestamp_timezone = "" + + +# # Print all metrics that pass through this filter. +# [[processors.topk]] +# ## How many seconds between aggregations +# # period = 10 +# +# ## How many top buckets to return per field +# ## Every field specified to aggregate over will return k number of results. +# ## For example, 1 field with k of 10 will return 10 buckets. While 2 fields +# ## with k of 3 will return 6 buckets. +# # k = 10 +# +# ## Over which tags should the aggregation be done. Globs can be specified, in +# ## which case any tag matching the glob will aggregated over. If set to an +# ## empty list is no aggregation over tags is done +# # group_by = ['*'] +# +# ## The field(s) to aggregate +# ## Each field defined is used to create an independent aggregation. Each +# ## aggregation will return k buckets. If a metric does not have a defined +# ## field the metric will be dropped from the aggregation. Considering using +# ## the defaults processor plugin to ensure fields are set if required. +# # fields = ["value"] +# +# ## What aggregation function to use. Options: sum, mean, min, max +# # aggregation = "mean" +# +# ## Instead of the top k largest metrics, return the bottom k lowest metrics +# # bottomk = false +# +# ## The plugin assigns each metric a GroupBy tag generated from its name and +# ## tags. If this setting is different than "" the plugin will add a +# ## tag (which name will be the value of this setting) to each metric with +# ## the value of the calculated GroupBy tag. Useful for debugging +# # add_groupby_tag = "" +# +# ## These settings provide a way to know the position of each metric in +# ## the top k. The 'add_rank_field' setting allows to specify for which +# ## fields the position is required. If the list is non empty, then a field +# ## will be added to each and every metric for each string present in this +# ## setting. This field will contain the ranking of the group that +# ## the metric belonged to when aggregated over that field. +# ## The name of the field will be set to the name of the aggregation field, +# ## suffixed with the string '_topk_rank' +# # add_rank_fields = [] +# +# ## These settings provide a way to know what values the plugin is generating +# ## when aggregating metrics. The 'add_aggregate_field' setting allows to +# ## specify for which fields the final aggregation value is required. If the +# ## list is non empty, then a field will be added to each every metric for +# ## each field present in this setting. This field will contain +# ## the computed aggregation for the group that the metric belonged to when +# ## aggregated over that field. +# ## The name of the field will be set to the name of the aggregation field, +# ## suffixed with the string '_topk_aggregate' +# # add_aggregate_fields = [] + + +# # Rotate multi field metric into several single field metrics +# [[processors.unpivot]] +# ## Metric mode to pivot to +# ## Set to "tag", metrics are pivoted as a tag and the metric is kept as +# ## the original measurement name. Tag key name is set by tag_key value. +# ## Set to "metric" creates a new metric named the field name. With this +# ## option the tag_key is ignored. Be aware that this could lead to metric +# ## name conflicts! +# # use_fieldname_as = "tag" +# +# ## Tag to use for the name. +# # tag_key = "name" +# +# ## Field to use for the name of the value. +# # value_key = "value" + + +############################################################################### +# AGGREGATOR PLUGINS # +############################################################################### + + +# # Keep the aggregate basicstats of each metric passing through. +# [[aggregators.basicstats]] +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false +# +# ## Configures which basic stats to push as fields +# # stats = ["count","min","max","mean","variance","stdev"] + + +# # Calculates a derivative for every field. +# [[aggregators.derivative]] +# ## The period in which to flush the aggregator. +# # period = "30s" +# +# ## Suffix to append for the resulting derivative field. +# # suffix = "_rate" +# +# ## Field to use for the quotient when computing the derivative. +# ## When using a field as the derivation parameter the name of that field will +# ## be used for the resulting derivative, e.g. *fieldname_by_parameter*. +# ## By default the timestamps of the metrics are used and the suffix is omitted. +# # variable = "" +# +# ## Maximum number of roll-overs in case only one measurement is found during a period. +# # max_roll_over = 10 + + +# # Report the final metric of a series +# [[aggregators.final]] +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false +# +# ## If false, _final is added to every field name +# # keep_original_field_names = false +# +# ## The time that a series is not updated until considering it final. Ignored +# ## when output_strategy is "periodic". +# # series_timeout = "5m" +# +# ## Output strategy, supported values: +# ## timeout -- output a metric if no new input arrived for `series_timeout` +# ## periodic -- output the last received metric every `period` +# # output_strategy = "timeout" + + +# # Configuration for aggregate histogram metrics +# [[aggregators.histogram]] +# ## The period in which to flush the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false +# +# ## If true, the histogram will be reset on flush instead +# ## of accumulating the results. +# reset = false +# +# ## Whether bucket values should be accumulated. If set to false, "gt" tag will be added. +# ## Defaults to true. +# cumulative = true +# +# ## Expiration interval for each histogram. The histogram will be expired if +# ## there are no changes in any buckets for this time interval. 0 == no expiration. +# # expiration_interval = "0m" +# +# ## If true, aggregated histogram are pushed to output only if it was updated since +# ## previous push. Defaults to false. +# # push_only_on_update = false +# +# ## Example config that aggregates all fields of the metric. +# # [[aggregators.histogram.config]] +# # ## Right borders of buckets (with +Inf implicitly added). +# # buckets = [0.0, 15.6, 34.5, 49.1, 71.5, 80.5, 94.5, 100.0] +# # ## The name of metric. +# # measurement_name = "cpu" +# +# ## Example config that aggregates only specific fields of the metric. +# # [[aggregators.histogram.config]] +# # ## Right borders of buckets (with +Inf implicitly added). +# # buckets = [0.0, 10.0, 20.0, 30.0, 40.0, 50.0, 60.0, 70.0, 80.0, 90.0, 100.0] +# # ## The name of metric. +# # measurement_name = "diskio" +# # ## The concrete fields of metric +# # fields = ["io_time", "read_time", "write_time"] + + +# # Merge metrics into multifield metrics by series key +# [[aggregators.merge]] +# ## General Aggregator Arguments: +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## Precision to round the metric timestamp to +# ## This is useful for cases where metrics to merge arrive within a small +# ## interval and thus vary in timestamp. The timestamp of the resulting metric +# ## is also rounded. +# # round_timestamp_to = "1ns" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# drop_original = true + + +# # Keep the aggregate min/max of each metric passing through. +# [[aggregators.minmax]] +# ## General Aggregator Arguments: +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false + + +# # Keep the aggregate quantiles of each metric passing through. +# [[aggregators.quantile]] +# ## General Aggregator Arguments: +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false +# +# ## Quantiles to output in the range [0,1] +# # quantiles = [0.25, 0.5, 0.75] +# +# ## Type of aggregation algorithm +# ## Supported are: +# ## "t-digest" -- approximation using centroids, can cope with large number of samples +# ## "exact R7" -- exact computation also used by Excel or NumPy (Hyndman & Fan 1996 R7) +# ## "exact R8" -- exact computation (Hyndman & Fan 1996 R8) +# ## NOTE: Do not use "exact" algorithms with large number of samples +# ## to not impair performance or memory consumption! +# # algorithm = "t-digest" +# +# ## Compression for approximation (t-digest). The value needs to be +# ## greater or equal to 1.0. Smaller values will result in more +# ## performance but less accuracy. +# # compression = 100.0 + + +# # Aggregate metrics using a Starlark script +# [[aggregators.starlark]] +# ## The Starlark source can be set as a string in this configuration file, or +# ## by referencing a file containing the script. Only one source or script +# ## should be set at once. +# ## +# ## Source of the Starlark script. +# source = ''' +# state = {} +# +# def add(metric): +# state["last"] = metric +# +# def push(): +# return state.get("last") +# +# def reset(): +# state.clear() +# ''' +# +# ## File containing a Starlark script. +# # script = "/usr/local/bin/myscript.star" +# +# ## The constants of the Starlark script. +# # [aggregators.starlark.constants] +# # max_size = 10 +# # threshold = 0.75 +# # default_name = "Julia" +# # debug_mode = true + + +# # Count the occurrence of values in fields. +# [[aggregators.valuecounter]] +# ## General Aggregator Arguments: +# ## The period on which to flush & clear the aggregator. +# # period = "30s" +# +# ## If true, the original metric will be dropped by the +# ## aggregator and will not get sent to the output plugins. +# # drop_original = false +# +# ## The fields for which the values will be counted +# fields = ["status"] + + +############################################################################### +# INPUT PLUGINS # +############################################################################### + + +# Read metrics about cpu usage +[[inputs.cpu]] + ## Whether to report per-cpu stats or not + percpu = true + ## Whether to report total system cpu stats or not + totalcpu = true + ## If true, collect raw CPU time metrics + collect_cpu_time = false + ## If true, compute and report the sum of all non-idle CPU states + ## NOTE: The resulting 'time_active' field INCLUDES 'iowait'! + report_active = false + ## If true and the info is available then add core_id and physical_id tags + core_tags = false + + +# Read metrics about disk usage by mount point +[[inputs.disk]] + ## By default stats will be gathered for all mount points. + ## Set mount_points will restrict the stats to only the specified mount points. + # mount_points = ["/"] + + ## Ignore mount points by filesystem type. + ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] + + ## Ignore mount points by mount options. + ## The 'mount' command reports options of all mounts in parathesis. + ## Bind mounts can be ignored with the special 'bind' option. + # ignore_mount_opts = [] + + +# Read metrics about disk IO by device +[[inputs.diskio]] + ## Devices to collect stats for + ## Wildcards are supported except for disk synonyms like '/dev/disk/by-id'. + ## ex. devices = ["sda", "sdb", "vd*", "/dev/disk/by-id/nvme-eui.00123deadc0de123"] + # devices = ["*"] + + ## Skip gathering of the disk's serial numbers. + # skip_serial_number = true + + ## Device metadata tags to add on systems supporting it (Linux only) + ## Use 'udevadm info -q property -n ' to get a list of properties. + ## Note: Most, but not all, udev properties can be accessed this way. Properties + ## that are currently inaccessible include DEVTYPE, DEVNAME, and DEVPATH. + # device_tags = ["ID_FS_TYPE", "ID_FS_USAGE"] + + ## Using the same metadata source as device_tags, you can also customize the + ## name of the device via templates. + ## The 'name_templates' parameter is a list of templates to try and apply to + ## the device. The template may contain variables in the form of '$PROPERTY' or + ## '${PROPERTY}'. The first template which does not contain any variables not + ## present for the device is used as the device name tag. + ## The typical use case is for LVM volumes, to get the VG/LV name instead of + ## the near-meaningless DM-0 name. + # name_templates = ["$ID_FS_LABEL","$DM_VG_NAME/$DM_LV_NAME"] + + +# Plugin to collect various Linux kernel statistics. +# This plugin ONLY supports Linux +[[inputs.kernel]] + ## Additional gather options + ## Possible options include: + ## * ksm - kernel same-page merging + ## * psi - pressure stall information + # collect = [] + + +# Read metrics about memory usage +[[inputs.mem]] + # no configuration + + +# Get the number of processes and group them by status +# This plugin ONLY supports non-Windows +[[inputs.processes]] + ## Use sudo to run ps command on *BSD systems. Linux systems will read + ## /proc, so this does not apply there. + # use_sudo = false + + +# Read metrics about swap memory usage +[[inputs.swap]] + # no configuration + + +# Read metrics about system load & uptime +[[inputs.system]] + # no configuration + + +# # Gather ActiveMQ metrics +# [[inputs.activemq]] +# ## ActiveMQ WebConsole URL +# url = "http://127.0.0.1:8161" +# +# ## Credentials for basic HTTP authentication +# # username = "admin" +# # password = "admin" +# +# ## Required ActiveMQ webadmin root path +# # webadmin = "admin" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# ## DEPRECATED: The "aerospike" plugin is deprecated in version 1.30.0 and will be removed in 1.40.0, use 'inputs.prometheus' with the Aerospike Prometheus Exporter instead. +# # Read stats from aerospike server(s) +# [[inputs.aerospike]] +# ## Aerospike servers to connect to (with port) +# ## This plugin will query all namespaces the aerospike +# ## server has configured and get stats for them. +# servers = ["localhost:3000"] +# +# # username = "telegraf" +# # password = "pa$$word" +# +# ## Optional TLS Config +# ## Set to true/false to enforce TLS being enabled/disabled. If not set, +# ## enable TLS only if any of the other options are specified. +# # tls_enable = +# ## Trusted root certificates for server +# # tls_ca = "/path/to/cafile" +# ## Used for TLS client certificate authentication +# # tls_cert = "/path/to/certfile" +# ## Used for TLS client certificate authentication +# # tls_key = "/path/to/keyfile" +# ## Password for the key file if it is encrypted +# # tls_key_pwd = "" +# ## Send the specified TLS server name via SNI +# # tls_server_name = "kubernetes.example.com" +# ## Minimal TLS version to accept by the client +# # tls_min_version = "TLS12" +# ## List of ciphers to accept, by default all secure ciphers will be accepted +# ## See https://pkg.go.dev/crypto/tls#pkg-constants for supported values. +# ## Use "all", "secure" and "insecure" to add all support ciphers, secure +# ## suites or insecure suites respectively. +# # tls_cipher_suites = ["secure"] +# ## Renegotiation method, "never", "once" or "freely" +# # tls_renegotiation_method = "never" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# +# # Feature Options +# # Add namespace variable to limit the namespaces executed on +# # Leave blank to do all +# # disable_query_namespaces = true # default false +# # namespaces = ["namespace1", "namespace2"] +# +# # Enable set level telemetry +# # query_sets = true # default: false +# # Add namespace set combinations to limit sets executed on +# # Leave blank to do all sets +# # sets = ["namespace1/set1", "namespace1/set2", "namespace3"] +# +# # Histograms +# # enable_ttl_histogram = true # default: false +# # enable_object_size_linear_histogram = true # default: false +# +# # by default, aerospike produces a 100 bucket histogram +# # this is not great for most graphing tools, this will allow +# # the ability to squash this to a smaller number of buckets +# # To have a balanced histogram, the number of buckets chosen +# # should divide evenly into 100. +# # num_histogram_buckets = 100 # default: 10 + + +# # Read Apache status information (mod_status) +# [[inputs.apache]] +# ## An array of URLs to gather from, must be directed at the machine +# ## readable version of the mod_status page including the auto query string. +# ## Default is "http://localhost/server-status?auto". +# urls = ["http://localhost/server-status?auto"] +# +# ## Credentials for basic HTTP authentication. +# # username = "myuser" +# # password = "mypassword" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Monitor APC UPSes connected to apcupsd +# [[inputs.apcupsd]] +# # A list of running apcupsd server to connect to. +# # If not provided will default to tcp://127.0.0.1:3551 +# servers = ["tcp://127.0.0.1:3551"] +# +# ## Timeout for dialing server. +# timeout = "5s" + + +# # Gather metrics from Apache Aurora schedulers +# [[inputs.aurora]] +# ## Schedulers are the base addresses of your Aurora Schedulers +# schedulers = ["http://127.0.0.1:8081"] +# +# ## Set of role types to collect metrics from. +# ## +# ## The scheduler roles are checked each interval by contacting the +# ## scheduler nodes; zookeeper is not contacted. +# # roles = ["leader", "follower"] +# +# ## Timeout is the max time for total network operations. +# # timeout = "5s" +# +# ## Username and password are sent using HTTP Basic Auth. +# # username = "username" +# # password = "pa$$word" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Gather Azure resources metrics from Azure Monitor API +# [[inputs.azure_monitor]] +# # can be found under Overview->Essentials in the Azure portal for your application/service +# subscription_id = "<>" +# # can be obtained by registering an application under Azure Active Directory +# client_id = "<>" +# # can be obtained by registering an application under Azure Active Directory. +# # If not specified Default Azure Credentials chain will be attempted: +# # - Environment credentials (AZURE_*) +# # - Workload Identity in Kubernetes cluster +# # - Managed Identity +# # - Azure CLI auth +# # - Developer Azure CLI auth +# client_secret = "<>" +# # can be found under Azure Active Directory->Properties +# tenant_id = "<>" +# # Define the optional Azure cloud option e.g. AzureChina, AzureGovernment or AzurePublic. The default is AzurePublic. +# # cloud_option = "AzurePublic" +# +# # resource target #1 to collect metrics from +# [[inputs.azure_monitor.resource_target]] +# # can be found under Overview->Essentials->JSON View in the Azure portal for your application/service +# # must start with 'resourceGroups/...' ('/subscriptions/xxxxxxxx-xxxx-xxxx-xxx-xxxxxxxxxxxx' +# # must be removed from the beginning of Resource ID property value) +# resource_id = "<>" +# # the metric names to collect +# # leave the array empty to use all metrics available to this resource +# metrics = [ "<>", "<>" ] +# # metrics aggregation type value to collect +# # can be 'Total', 'Count', 'Average', 'Minimum', 'Maximum' +# # leave the array empty to collect all aggregation types values for each metric +# aggregations = [ "<>", "<>" ] +# +# # resource target #2 to collect metrics from +# [[inputs.azure_monitor.resource_target]] +# resource_id = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] +# +# # resource group target #1 to collect metrics from resources under it with resource type +# [[inputs.azure_monitor.resource_group_target]] +# # the resource group name +# resource_group = "<>" +# +# # defines the resources to collect metrics from +# [[inputs.azure_monitor.resource_group_target.resource]] +# # the resource type +# resource_type = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] +# +# # defines the resources to collect metrics from +# [[inputs.azure_monitor.resource_group_target.resource]] +# resource_type = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] +# +# # resource group target #2 to collect metrics from resources under it with resource type +# [[inputs.azure_monitor.resource_group_target]] +# resource_group = "<>" +# +# [[inputs.azure_monitor.resource_group_target.resource]] +# resource_type = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] +# +# # subscription target #1 to collect metrics from resources under it with resource type +# [[inputs.azure_monitor.subscription_target]] +# resource_type = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] +# +# # subscription target #2 to collect metrics from resources under it with resource type +# [[inputs.azure_monitor.subscription_target]] +# resource_type = "<>" +# metrics = [ "<>", "<>" ] +# aggregations = [ "<>", "<>" ] + + +# # Gather Azure Storage Queue metrics +# [[inputs.azure_storage_queue]] +# ## Azure Storage Account name and shared access key (required) +# account_name = "mystorageaccount" +# account_key = "storageaccountaccesskey" +# +# ## Disable peeking age of oldest message (faster) +# # peek_oldest_message_age = true + + +# # Read metrics of bcache from stats_total and dirty_data +# # This plugin ONLY supports Linux +# [[inputs.bcache]] +# ## Bcache sets path +# ## If not specified, then default is: +# bcachePath = "/sys/fs/bcache" +# +# ## By default, Telegraf gather stats for all bcache devices +# ## Setting devices will restrict the stats to the specified +# ## bcache devices. +# bcacheDevs = ["bcache0"] + + +# # Collects Beanstalkd server and tubes stats +# [[inputs.beanstalkd]] +# ## Server to collect data from +# server = "localhost:11300" +# +# ## List of tubes to gather stats about. +# ## If no tubes specified then data gathered for each tube on server reported by list-tubes command +# tubes = ["notifications"] + + +# # Read metrics exposed by Beat +# [[inputs.beat]] +# ## An URL from which to read Beat-formatted JSON +# ## Default is "http://127.0.0.1:5066". +# url = "http://127.0.0.1:5066" +# +# ## Enable collection of the listed stats +# ## An empty list means collect all. Available options are currently +# ## "beat", "libbeat", "system" and "filebeat". +# # include = ["beat", "libbeat", "filebeat"] +# +# ## HTTP method +# # method = "GET" +# +# ## Optional HTTP headers +# # headers = {"X-Special-Header" = "Special-Value"} +# +# ## Override HTTP "Host" header +# # host_header = "logstash.example.com" +# +# ## Timeout for HTTP requests +# # timeout = "5s" +# +# ## Optional HTTP Basic Auth credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read BIND nameserver XML statistics +# [[inputs.bind]] +# ## An array of BIND XML statistics URI to gather stats. +# ## Default is "http://localhost:8053/xml/v3". +# # urls = ["http://localhost:8053/xml/v3"] +# # gather_memory_contexts = false +# # gather_views = false +# +# ## Report xml v3 counters as integers instead of unsigned for backward +# ## compatibility. Set this to false as soon as possible! +# ## Values are clipped if exceeding the integer range. +# # report_counters_as_int = true +# +# ## Timeout for http requests made by bind nameserver +# # timeout = "4s" + + +# # Collect bond interface status, slaves statuses and failures count +# [[inputs.bond]] +# ## Sets 'proc' directory path +# ## If not specified, then default is /proc +# # host_proc = "/proc" +# +# ## Sets 'sys' directory path +# ## If not specified, then default is /sys +# # host_sys = "/sys" +# +# ## By default, telegraf gather stats for all bond interfaces +# ## Setting interfaces will restrict the stats to the specified +# ## bond interfaces. +# # bond_interfaces = ["bond0"] +# +# ## Tries to collect additional bond details from /sys/class/net/{bond} +# ## currently only useful for LACP (mode 4) bonds +# # collect_sys_details = false + + +# # Collect Kafka topics and consumers status from Burrow HTTP API. +# [[inputs.burrow]] +# ## Burrow API endpoints in format "schema://host:port". +# ## Default is "http://localhost:8000". +# servers = ["http://localhost:8000"] +# +# ## Override Burrow API prefix. +# ## Useful when Burrow is behind reverse-proxy. +# # api_prefix = "/v3/kafka" +# +# ## Maximum time to receive response. +# # response_timeout = "5s" +# +# ## Limit per-server concurrent connections. +# ## Useful in case of large number of topics or consumer groups. +# # concurrent_connections = 20 +# +# ## Filter clusters, default is no filtering. +# ## Values can be specified as glob patterns. +# # clusters_include = [] +# # clusters_exclude = [] +# +# ## Filter consumer groups, default is no filtering. +# ## Values can be specified as glob patterns. +# # groups_include = [] +# # groups_exclude = [] +# +# ## Filter topics, default is no filtering. +# ## Values can be specified as glob patterns. +# # topics_include = [] +# # topics_exclude = [] +# +# ## Credentials for basic HTTP authentication. +# # username = "" +# # password = "" +# +# ## Optional SSL config +# # ssl_ca = "/etc/telegraf/ca.pem" +# # ssl_cert = "/etc/telegraf/cert.pem" +# # ssl_key = "/etc/telegraf/key.pem" +# # insecure_skip_verify = false + + +# # Collects performance metrics from the MON, OSD, MDS and RGW nodes +# # in a Ceph storage cluster. +# [[inputs.ceph]] +# ## This is the recommended interval to poll. Too frequent and you +# ## will lose data points due to timeouts during rebalancing and recovery +# interval = '1m' +# +# ## All configuration values are optional, defaults are shown below +# +# ## location of ceph binary +# ceph_binary = "/usr/bin/ceph" +# +# ## directory in which to look for socket files +# socket_dir = "/var/run/ceph" +# +# ## prefix of MON and OSD socket files, used to determine socket type +# mon_prefix = "ceph-mon" +# osd_prefix = "ceph-osd" +# mds_prefix = "ceph-mds" +# rgw_prefix = "ceph-client" +# +# ## suffix used to identify socket files +# socket_suffix = "asok" +# +# ## Ceph user to authenticate as, ceph will search for the corresponding +# ## keyring e.g. client.admin.keyring in /etc/ceph, or the explicit path +# ## defined in the client section of ceph.conf for example: +# ## +# ## [client.telegraf] +# ## keyring = /etc/ceph/client.telegraf.keyring +# ## +# ## Consult the ceph documentation for more detail on keyring generation. +# ceph_user = "client.admin" +# +# ## Ceph configuration to use to locate the cluster +# ceph_config = "/etc/ceph/ceph.conf" +# +# ## Whether to gather statistics via the admin socket +# gather_admin_socket_stats = true +# +# ## Whether to gather statistics via ceph commands, requires ceph_user +# ## and ceph_config to be specified +# gather_cluster_stats = false + + +# # Read specific statistics per cgroup +# # This plugin ONLY supports Linux +# [[inputs.cgroup]] +# ## Directories in which to look for files, globs are supported. +# ## Consider restricting paths to the set of cgroups you really +# ## want to monitor if you have a large number of cgroups, to avoid +# ## any cardinality issues. +# # paths = [ +# # "/sys/fs/cgroup/memory", +# # "/sys/fs/cgroup/memory/child1", +# # "/sys/fs/cgroup/memory/child2/*", +# # ] +# ## cgroup stat fields, as file names, globs are supported. +# ## these file names are appended to each path from above. +# # files = ["memory.*usage*", "memory.limit_in_bytes"] + + +# # Pull Metric Statistics from Amazon CloudWatch +# [[inputs.cloudwatch]] +# ## Amazon Region +# region = "us-east-1" +# +# ## Amazon Credentials +# ## Credentials are loaded in the following order +# ## 1) Web identity provider credentials via STS if role_arn and +# ## web_identity_token_file are specified +# ## 2) Assumed credentials via STS if role_arn is specified +# ## 3) explicit credentials from 'access_key' and 'secret_key' +# ## 4) shared profile from 'profile' +# ## 5) environment variables +# ## 6) shared credentials file +# ## 7) EC2 Instance Profile +# # access_key = "" +# # secret_key = "" +# # token = "" +# # role_arn = "" +# # web_identity_token_file = "" +# # role_session_name = "" +# # profile = "" +# # shared_credential_file = "" +# +# ## If you are using CloudWatch cross-account observability, you can +# ## set IncludeLinkedAccounts to true in a monitoring account +# ## and collect metrics from the linked source accounts +# # include_linked_accounts = false +# +# ## Endpoint to make request against, the correct endpoint is automatically +# ## determined and this option should only be set if you wish to override the +# ## default. +# ## ex: endpoint_url = "http://localhost:8000" +# # endpoint_url = "" +# +# ## Set http_proxy +# # use_system_proxy = false +# # http_proxy_url = "http://localhost:8888" +# +# ## The minimum period for Cloudwatch metrics is 1 minute (60s). However not +# ## all metrics are made available to the 1 minute period. Some are collected +# ## at 3 minute, 5 minute, or larger intervals. +# ## See https://aws.amazon.com/cloudwatch/faqs/#monitoring. +# ## Note that if a period is configured that is smaller than the minimum for a +# ## particular metric, that metric will not be returned by the Cloudwatch API +# ## and will not be collected by Telegraf. +# # +# ## Requested CloudWatch aggregation Period (required) +# ## Must be a multiple of 60s. +# period = "5m" +# +# ## Collection Delay (required) +# ## Must account for metrics availability via CloudWatch API +# delay = "5m" +# +# ## Recommended: use metric 'interval' that is a multiple of 'period' to avoid +# ## gaps or overlap in pulled data +# interval = "5m" +# +# ## Recommended if "delay" and "period" are both within 3 hours of request +# ## time. Invalid values will be ignored. Recently Active feature will only +# ## poll for CloudWatch ListMetrics values that occurred within the last 3h. +# ## If enabled, it will reduce total API usage of the CloudWatch ListMetrics +# ## API and require less memory to retain. +# ## Do not enable if "period" or "delay" is longer than 3 hours, as it will +# ## not return data more than 3 hours old. +# ## See https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_ListMetrics.html +# # recently_active = "PT3H" +# +# ## Configure the TTL for the internal cache of metrics. +# # cache_ttl = "1h" +# +# ## Metric Statistic Namespaces, wildcards are allowed +# # namespaces = ["*"] +# +# ## Metric Format +# ## This determines the format of the produces metrics. 'sparse', the default +# ## will produce a unique field for each statistic. 'dense' will report all +# ## statistics will be in a field called value and have a metric_name tag +# ## defining the name of the statistic. See the plugin README for examples. +# # metric_format = "sparse" +# +# ## Maximum requests per second. Note that the global default AWS rate limit +# ## is 50 reqs/sec, so if you define multiple namespaces, these should add up +# ## to a maximum of 50. +# ## See http://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_limits.html +# # ratelimit = 25 +# +# ## Timeout for http requests made by the cloudwatch client. +# # timeout = "5s" +# +# ## Batch Size +# ## The size of each batch to send requests to Cloudwatch. 500 is the +# ## suggested largest size. If a request gets to large (413 errors), consider +# ## reducing this amount. +# # batch_size = 500 +# +# ## Namespace-wide statistic filters. These allow fewer queries to be made to +# ## cloudwatch. +# # statistic_include = ["average", "sum", "minimum", "maximum", sample_count"] +# # statistic_exclude = [] +# +# ## Metrics to Pull +# ## Defaults to all Metrics in Namespace if nothing is provided +# ## Refreshes Namespace available metrics every 1h +# #[[inputs.cloudwatch.metrics]] +# # names = ["Latency", "RequestCount"] +# # +# # ## Statistic filters for Metric. These allow for retrieving specific +# # ## statistics for an individual metric. +# # # statistic_include = ["average", "sum", "minimum", "maximum", sample_count"] +# # # statistic_exclude = [] +# # +# # ## Dimension filters for Metric. +# # ## All dimensions defined for the metric names must be specified in order +# # ## to retrieve the metric statistics. +# # ## 'value' has wildcard / 'glob' matching support such as 'p-*'. +# # [[inputs.cloudwatch.metrics.dimensions]] +# # name = "LoadBalancerName" +# # value = "p-example" + + +# # Collects conntrack stats from the configured directories and files. +# # This plugin ONLY supports Linux +# [[inputs.conntrack]] +# ## The following defaults would work with multiple versions of conntrack. +# ## Note the nf_ and ip_ filename prefixes are mutually exclusive across +# ## kernel versions, as are the directory locations. +# +# ## Look through /proc/net/stat/nf_conntrack for these metrics +# ## all - aggregated statistics +# ## percpu - include detailed statistics with cpu tag +# collect = ["all", "percpu"] +# +# ## User-specified directories and files to look through +# ## Directories to search within for the conntrack files above. +# ## Missing directories will be ignored. +# dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"] +# +# ## Superset of filenames to look for within the conntrack dirs. +# ## Missing files will be ignored. +# files = ["ip_conntrack_count","ip_conntrack_max", +# "nf_conntrack_count","nf_conntrack_max"] + + +# # Gather health check statuses from services registered in Consul +# [[inputs.consul]] +# ## Consul server address +# # address = "localhost:8500" +# +# ## URI scheme for the Consul server, one of "http", "https" +# # scheme = "http" +# +# ## Metric version controls the mapping from Consul metrics into +# ## Telegraf metrics. Version 2 moved all fields with string values +# ## to tags. +# ## +# ## example: metric_version = 1; deprecated in 1.16 +# ## metric_version = 2; recommended version +# # metric_version = 1 +# +# ## ACL token used in every request +# # token = "" +# +# ## HTTP Basic Authentication username and password. +# # username = "" +# # password = "" +# +# ## Data center to query the health checks from +# # datacenter = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = true +# +# ## Consul checks' tag splitting +# # When tags are formatted like "key:value" with ":" as a delimiter then +# # they will be split and reported as proper key:value in Telegraf +# # tag_delimiter = ":" + + +# # Read metrics from the Consul Agent API +# [[inputs.consul_agent]] +# ## URL for the Consul agent +# # url = "http://127.0.0.1:8500" +# +# ## Use auth token for authorization. +# ## If both are set, an error is thrown. +# ## If both are empty, no token will be used. +# # token_file = "/path/to/auth/token" +# ## OR +# # token = "a1234567-40c7-9048-7bae-378687048181" +# +# ## Set timeout (default 5 seconds) +# # timeout = "5s" +# +# ## Optional TLS Config +# # tls_ca = /path/to/cafile +# # tls_cert = /path/to/certfile +# # tls_key = /path/to/keyfile + + +# # Read per-node and per-bucket metrics from Couchbase +# [[inputs.couchbase]] +# ## specify servers via a url matching: +# ## [protocol://][:password]@address[:port] +# ## e.g. +# ## http://couchbase-0.example.com/ +# ## http://admin:secret@couchbase-0.example.com:8091/ +# ## +# ## If no servers are specified, then localhost is used as the host. +# ## If no protocol is specified, HTTP is used. +# ## If no port is specified, 8091 is used. +# servers = ["http://localhost:8091"] +# +# ## Filter bucket fields to include only here. +# # bucket_stats_included = ["quota_percent_used", "ops_per_sec", "disk_fetches", "item_count", "disk_used", "data_used", "mem_used"] +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification (defaults to false) +# ## If set to false, tls_cert and tls_key are required +# # insecure_skip_verify = false +# +# ## Whether to collect cluster-wide bucket statistics +# ## It is recommended to disable this in favor of node_stats +# ## to get a better view of the cluster. +# # cluster_bucket_stats = true +# +# ## Whether to collect bucket stats for each individual node +# # node_bucket_stats = false +# +# ## List of additional stats to collect, choose from: +# ## * autofailover +# # additional_stats = [] + + +# # Read CouchDB Stats from one or more servers +# [[inputs.couchdb]] +# ## Works with CouchDB stats endpoints out of the box +# ## Multiple Hosts from which to read CouchDB stats: +# hosts = ["http://localhost:8086/_stats"] +# +# ## Use HTTP Basic Authentication. +# # basic_username = "telegraf" +# # basic_password = "p@ssw0rd" + + +# # Fetch metrics from a CSGO SRCDS +# [[inputs.csgo]] +# ## Specify servers using the following format: +# ## servers = [ +# ## ["ip1:port1", "rcon_password1"], +# ## ["ip2:port2", "rcon_password2"], +# ## ] +# # +# ## If no servers are specified, no data will be collected +# servers = [] + + +# # Input plugin for DC/OS metrics +# [[inputs.dcos]] +# ## The DC/OS cluster URL. +# cluster_url = "https://dcos-master-1" +# +# ## The ID of the service account. +# service_account_id = "telegraf" +# ## The private key file for the service account. +# service_account_private_key = "/etc/telegraf/telegraf-sa-key.pem" +# +# ## Path containing login token. If set, will read on every gather. +# # token_file = "/home/dcos/.dcos/token" +# +# ## In all filter options if both include and exclude are empty all items +# ## will be collected. Arrays may contain glob patterns. +# ## +# ## Node IDs to collect metrics from. If a node is excluded, no metrics will +# ## be collected for its containers or apps. +# # node_include = [] +# # node_exclude = [] +# ## Container IDs to collect container metrics from. +# # container_include = [] +# # container_exclude = [] +# ## Container IDs to collect app metrics from. +# # app_include = [] +# # app_exclude = [] +# +# ## Maximum concurrent connections to the cluster. +# # max_connections = 10 +# ## Maximum time to receive a response from cluster. +# # response_timeout = "20s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## If false, skip chain & host verification +# # insecure_skip_verify = true +# +# ## Recommended filtering to reduce series cardinality. +# # [inputs.dcos.tagdrop] +# # path = ["/var/lib/mesos/slave/slaves/*"] + + +# # Read metrics from one or many disque servers +# [[inputs.disque]] +# ## An array of URI to gather stats about. Specify an ip or hostname +# ## with optional port and password. +# ## ie disque://localhost, disque://10.10.3.33:18832, 10.0.0.1:10000, etc. +# ## If no servers are specified, then localhost is used as the host. +# servers = ["localhost"] + + +# # Provide a native collection for dmsetup based statistics for dm-cache +# # This plugin ONLY supports Linux +# [[inputs.dmcache]] +# ## Whether to report per-device stats or not +# per_device = true + + +# # Query given DNS server and gives statistics +# [[inputs.dns_query]] +# ## servers to query +# servers = ["8.8.8.8"] +# +# ## Network is the network protocol name. +# # network = "udp" +# +# ## Domains or subdomains to query. +# # domains = ["."] +# +# ## Query record type. +# ## Possible values: A, AAAA, CNAME, MX, NS, PTR, TXT, SOA, SPF, SRV. +# # record_type = "A" +# +# ## Dns server port. +# # port = 53 +# +# ## Query timeout +# # timeout = "2s" +# +# ## Include the specified additional properties in the resulting metric. +# ## The following values are supported: +# ## "first_ip" -- return IP of the first A and AAAA answer +# ## "all_ips" -- return IPs of all A and AAAA answers +# # include_fields = [] + + +# # Read metrics about dovecot servers +# [[inputs.dovecot]] +# ## specify dovecot servers via an address:port list +# ## e.g. +# ## localhost:24242 +# ## or as an UDS socket +# ## e.g. +# ## /var/run/dovecot/old-stats +# ## +# ## If no servers are specified, then localhost is used as the host. +# servers = ["localhost:24242"] +# +# ## Type is one of "user", "domain", "ip", or "global" +# type = "global" +# +# ## Wildcard matches like "*.com". An empty string "" is same as "*" +# ## If type = "ip" filters should be +# filters = [""] + + +# # Read metrics about ECS containers +# [[inputs.ecs]] +# ## ECS metadata url. +# ## Metadata v2 API is used if set explicitly. Otherwise, +# ## v3 metadata endpoint API is used if available. +# # endpoint_url = "" +# +# ## Containers to include and exclude. Globs accepted. +# ## Note that an empty array for both will include all containers +# # container_name_include = [] +# # container_name_exclude = [] +# +# ## Container states to include and exclude. Globs accepted. +# ## When empty only containers in the "RUNNING" state will be captured. +# ## Possible values are "NONE", "PULLED", "CREATED", "RUNNING", +# ## "RESOURCES_PROVISIONED", "STOPPED". +# # container_status_include = [] +# # container_status_exclude = [] +# +# ## ecs labels to include and exclude as tags. Globs accepted. +# ## Note that an empty array for both will include all labels as tags +# ecs_label_include = [ "com.amazonaws.ecs.*" ] +# ecs_label_exclude = [] +# +# ## Timeout for queries. +# # timeout = "5s" + + +# # Returns ethtool statistics for given interfaces +# # This plugin ONLY supports Linux +# [[inputs.ethtool]] +# ## List of interfaces to pull metrics for +# # interface_include = ["eth0"] +# +# ## List of interfaces to ignore when pulling metrics. +# # interface_exclude = ["eth1"] +# +# ## Plugin behavior for downed interfaces +# ## Available choices: +# ## - expose: collect & report metrics for down interfaces +# ## - skip: ignore interfaces that are marked down +# # down_interfaces = "expose" +# +# ## Reading statistics from interfaces in additional namespaces is also +# ## supported, so long as the namespaces are named (have a symlink in +# ## /var/run/netns). The telegraf process will also need the CAP_SYS_ADMIN +# ## permission. +# ## By default, only the current namespace will be used. For additional +# ## namespace support, at least one of `namespace_include` and +# ## `namespace_exclude` must be provided. +# ## To include all namespaces, set `namespace_include` to `["*"]`. +# ## The initial namespace (if anonymous) can be specified with the empty +# ## string (""). +# +# ## List of namespaces to pull metrics for +# # namespace_include = [] +# +# ## List of namespace to ignore when pulling metrics. +# # namespace_exclude = [] +# +# ## Some drivers declare statistics with extra whitespace, different spacing, +# ## and mix cases. This list, when enabled, can be used to clean the keys. +# ## Here are the current possible normalizations: +# ## * snakecase: converts fooBarBaz to foo_bar_baz +# ## * trim: removes leading and trailing whitespace +# ## * lower: changes all capitalized letters to lowercase +# ## * underscore: replaces spaces with underscores +# # normalize_keys = ["snakecase", "trim", "lower", "underscore"] + + +# # Read metrics from one or more commands that can output to stdout +# [[inputs.exec]] +# ## Commands array +# commands = [] +# +# ## Environment variables +# ## Array of "key=value" pairs to pass as environment variables +# ## e.g. "KEY=value", "USERNAME=John Doe", +# ## "LD_LIBRARY_PATH=/opt/custom/lib64:/usr/local/libs" +# # environment = [] +# +# ## Timeout for each command to complete. +# # timeout = "5s" +# +# ## Measurement name suffix +# ## Used for separating different commands +# # name_suffix = "" +# +# ## Ignore Error Code +# ## If set to true, a non-zero error code in not considered an error and the +# ## plugin will continue to parse the output. +# # ignore_error = false +# +# ## Log all messages sent to stderr +# # log_stderr = false +# +# ## Data format +# ## By default, exec expects JSON. This was done for historical reasons and is +# ## different than other inputs that use the influx line protocol. Each data +# ## format has its own unique set of configuration options, read more about +# ## them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# # data_format = "json" + + +# # Read metrics from fail2ban. +# [[inputs.fail2ban]] +# ## Use sudo to run fail2ban-client +# # use_sudo = false +# +# ## Use the given socket instead of the default one +# # socket = "/var/run/fail2ban/fail2ban.sock" + + +# # Read devices value(s) from a Fibaro controller +# [[inputs.fibaro]] +# ## Required Fibaro controller address/hostname. +# ## Note: at the time of writing this plugin, Fibaro only implemented http - no https available +# url = "http://:80" +# +# ## Required credentials to access the API (http://) +# username = "" +# password = "" +# +# ## Amount of time allowed to complete the HTTP request +# # timeout = "5s" +# +# ## Fibaro Device Type +# ## By default, this plugin will attempt to read using the HC2 API. For HC3 +# ## devices, set this to "HC3" +# # device_type = "HC2" + + +# # Parse a complete file each interval +# [[inputs.file]] +# ## Files to parse each interval. Accept standard unix glob matching rules, +# ## as well as ** to match recursive files and directories. +# files = ["/tmp/metrics.out"] +# +# ## Character encoding to use when interpreting the file contents. Invalid +# ## characters are replaced using the unicode replacement character. When set +# ## to the empty string the data is not decoded to text. +# ## ex: character_encoding = "utf-8" +# ## character_encoding = "utf-16le" +# ## character_encoding = "utf-16be" +# ## character_encoding = "" +# # character_encoding = "" +# +# ## Data format to consume. +# ## Each data format has its own unique set of configuration options, read +# ## more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Please use caution when using the following options: when file name +# ## variation is high, this can increase the cardinality significantly. Read +# ## more about cardinality here: +# ## https://docs.influxdata.com/influxdb/cloud/reference/glossary/#series-cardinality +# +# ## Name of tag to store the name of the file. Disabled if not set. +# # file_tag = "" +# +# ## Name of tag to store the absolute path and name of the file. Disabled if +# ## not set. +# # file_path_tag = "" + + +# # Count files in a directory +# [[inputs.filecount]] +# ## Directories to gather stats about. +# ## This accept standard unit glob matching rules, but with the addition of +# ## ** as a "super asterisk". ie: +# ## /var/log/** -> recursively find all directories in /var/log and count files in each directories +# ## /var/log/*/* -> find all directories with a parent dir in /var/log and count files in each directories +# ## /var/log -> count all files in /var/log and all of its subdirectories +# directories = ["/var/cache/apt", "/tmp"] +# +# ## Only count files that match the name pattern. Defaults to "*". +# name = "*" +# +# ## Count files in subdirectories. Defaults to true. +# recursive = true +# +# ## Only count regular files. Defaults to true. +# regular_only = true +# +# ## Follow all symlinks while walking the directory tree. Defaults to false. +# follow_symlinks = false +# +# ## Only count files that are at least this size. If size is +# ## a negative number, only count files that are smaller than the +# ## absolute value of size. Acceptable units are B, KiB, MiB, KB, ... +# ## Without quotes and units, interpreted as size in bytes. +# size = "0B" +# +# ## Only count files that have not been touched for at least this +# ## duration. If mtime is negative, only count files that have been +# ## touched in this duration. Defaults to "0s". +# mtime = "0s" + + +# # Read stats about given file(s) +# [[inputs.filestat]] +# ## Files to gather stats about. +# ## These accept standard unix glob matching rules, but with the addition of +# ## ** as a "super asterisk". See https://github.com/gobwas/glob. +# files = ["/etc/telegraf/telegraf.conf", "/var/log/**.log"] +# +# ## If true, read the entire file and calculate an md5 checksum. +# md5 = false + + +# # Read real time temps from fireboard.io servers +# [[inputs.fireboard]] +# ## Specify auth token for your account +# auth_token = "invalidAuthToken" +# ## You can override the fireboard server URL if necessary +# # url = https://fireboard.io/api/v1/devices.json +# ## You can set a different http_timeout if you need to +# ## You should set a string using an number and time indicator +# ## for example "12s" for 12 seconds. +# # http_timeout = "4s" + + +# # Read metrics exposed by fluentd in_monitor plugin +# [[inputs.fluentd]] +# ## This plugin reads information exposed by fluentd (using /api/plugins.json endpoint). +# ## +# ## Endpoint: +# ## - only one URI is allowed +# ## - https is not supported +# endpoint = "http://localhost:24220/api/plugins.json" +# +# ## Define which plugins have to be excluded (based on "type" field - e.g. monitor_agent) +# exclude = [ +# "monitor_agent", +# "dummy", +# ] + + +# # Gather fritzbox status +# [[inputs.fritzbox]] +# ## URLs of the devices to query including login credentials +# urls = [ "http://user:password@fritz.box:49000/" ] +# +# ## The information to collect (see README for further details). +# # collect = [ +# # "device", +# # "wan", +# # "ppp", +# # "dsl", +# # "wlan", +# # ] +# +# ## The http timeout to use. +# # timeout = "10s" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# # tls_key_pwd = "secret" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Gather repository information from GitHub hosted repositories. +# [[inputs.github]] +# ## List of repositories to monitor +# repositories = [ +# "influxdata/telegraf", +# "influxdata/influxdb" +# ] +# +# ## Github API access token. Unauthenticated requests are limited to 60 per hour. +# # access_token = "" +# +# ## Github API enterprise url. Github Enterprise accounts must specify their base url. +# # enterprise_base_url = "" +# +# ## Timeout for HTTP requests. +# # http_timeout = "5s" +# +# ## List of additional fields to query. +# ## NOTE: Getting those fields might involve issuing additional API-calls, so please +# ## make sure you do not exceed the rate-limit of GitHub. +# ## +# ## Available fields are: +# ## - pull-requests -- number of open and closed pull requests (2 API-calls per repository) +# # additional_fields = [] + + +# # Gather metrics by iterating the files located on a Cloud Storage Bucket. +# [[inputs.google_cloud_storage]] +# ## Required. Name of Cloud Storage bucket to ingest metrics from. +# bucket = "my-bucket" +# +# ## Optional. Prefix of Cloud Storage bucket keys to list metrics from. +# # key_prefix = "my-bucket" +# +# ## Key that will store the offsets in order to pick up where the ingestion was left. +# offset_key = "offset_key" +# +# ## Key that will store the offsets in order to pick up where the ingestion was left. +# objects_per_iteration = 10 +# +# ## Required. Data format to consume. +# ## Each data format has its own unique set of configuration options. +# ## Read more about them here: +# ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_INPUT.md +# data_format = "influx" +# +# ## Optional. Filepath for GCP credentials JSON file to authorize calls to +# ## Google Cloud Storage APIs. If not set explicitly, Telegraf will attempt to use +# ## Application Default Credentials, which is preferred. +# # credentials_file = "path/to/my/creds.json" + + +# # Read flattened metrics from one or more GrayLog HTTP endpoints +# [[inputs.graylog]] +# ## API endpoint, currently supported API: +# ## +# ## - multiple (e.g. http://:9000/api/system/metrics/multiple) +# ## - namespace (e.g. http://:9000/api/system/metrics/namespace/{namespace}) +# ## +# ## For namespace endpoint, the metrics array will be ignored for that call. +# ## Endpoint can contain namespace and multiple type calls. +# ## +# ## Please check http://[graylog-server-ip]:9000/api/api-browser for full list +# ## of endpoints +# servers = [ +# "http://[graylog-server-ip]:9000/api/system/metrics/multiple", +# ] +# +# ## Set timeout (default 5 seconds) +# # timeout = "5s" +# +# ## Metrics list +# ## List of metrics can be found on Graylog webservice documentation. +# ## Or by hitting the web service api at: +# ## http://[graylog-host]:9000/api/system/metrics +# metrics = [ +# "jvm.cl.loaded", +# "jvm.memory.pools.Metaspace.committed" +# ] +# +# ## Username and password +# username = "" +# password = "" +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Read metrics of HAProxy, via stats socket or http endpoints +# [[inputs.haproxy]] +# ## List of stats endpoints. Metrics can be collected from both http and socket +# ## endpoints. Examples of valid endpoints: +# ## - http://myhaproxy.com:1936/haproxy?stats +# ## - https://myhaproxy.com:8000/stats +# ## - socket:/run/haproxy/admin.sock +# ## - /run/haproxy/*.sock +# ## - tcp://127.0.0.1:1936 +# ## +# ## Server addresses not starting with 'http://', 'https://', 'tcp://' will be +# ## treated as possible sockets. When specifying local socket, glob patterns are +# ## supported. +# servers = ["http://myhaproxy.com:1936/haproxy?stats"] +# +# ## By default, some of the fields are renamed from what haproxy calls them. +# ## Setting this option to true results in the plugin keeping the original +# ## field names. +# # keep_field_names = false +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false + + +# # Monitor disks' temperatures using hddtemp +# [[inputs.hddtemp]] +# ## By default, telegraf gathers temps data from all disks detected by the +# ## hddtemp. +# ## +# ## Only collect temps from the selected disks. +# ## +# ## A * as the device name will return the temperature values of all disks. +# ## +# # address = "127.0.0.1:7634" +# # devices = ["sda", "*"] + + +# # HTTP/HTTPS request given an address a method and a timeout +# [[inputs.http_response]] +# ## List of urls to query. +# # urls = ["http://localhost"] +# +# ## Set http_proxy. +# ## Telegraf uses the system wide proxy settings if it's is not set. +# # http_proxy = "http://localhost:8888" +# +# ## Set response_timeout (default 5 seconds) +# # response_timeout = "5s" +# +# ## HTTP Request Method +# # method = "GET" +# +# ## Whether to follow redirects from the server (defaults to false) +# # follow_redirects = false +# +# ## Optional file with Bearer token +# ## file content is added as an Authorization header +# # bearer_token = "/path/to/file" +# +# ## Optional HTTP Basic Auth Credentials +# # username = "username" +# # password = "pa$$word" +# +# ## Optional HTTP Request Body +# # body = ''' +# # {'fake':'data'} +# # ''' +# +# ## Optional HTTP Request Body Form +# ## Key value pairs to encode and set at URL form. Can be used with the POST +# ## method + application/x-www-form-urlencoded content type to replicate the +# ## POSTFORM method. +# # body_form = { "key": "value" } +# +# ## Optional name of the field that will contain the body of the response. +# ## By default it is set to an empty String indicating that the body's +# ## content won't be added +# # response_body_field = '' +# +# ## Maximum allowed HTTP response body size in bytes. +# ## 0 means to use the default of 32MiB. +# ## If the response body size exceeds this limit a "body_read_error" will +# ## be raised. +# # response_body_max_size = "32MiB" +# +# ## Optional substring or regex match in body of the response (case sensitive) +# # response_string_match = "\"service_status\": \"up\"" +# # response_string_match = "ok" +# # response_string_match = "\".*_status\".?:.?\"up\"" +# +# ## Expected response status code. +# ## The status code of the response is compared to this value. If they match, +# ## the field "response_status_code_match" will be 1, otherwise it will be 0. +# ## If the expected status code is 0, the check is disabled and the field +# ## won't be added. +# # response_status_code = 0 +# +# ## Optional TLS Config +# # tls_ca = "/etc/telegraf/ca.pem" +# # tls_cert = "/etc/telegraf/cert.pem" +# # tls_key = "/etc/telegraf/key.pem" +# ## Use TLS but skip chain & host verification +# # insecure_skip_verify = false +# ## Use the given name as the SNI server name on each URL +# # tls_server_name = "" +# ## TLS renegotiation method, choose from "never", "once", "freely" +# # tls_renegotiation_method = "never" +# +# ## HTTP Request Headers (all values must be strings) +# # [inputs.http_response.headers] +# # Host = "github.com" +# +# ## Optional setting to map response http headers into tags +# ## If the http header is not present on the request, no corresponding tag will +# ## be added. If multiple instances of the http header are present, only the +# ## first value will be used. +# # http_header_tags = {"HTTP_HEADER" = "TAG_NAME"} +# +# ## Interface to use when dialing an address +# # interface = "eth0" +# +# ## Optional Cookie authentication +# # cookie_auth_url = "https://localhost/authMe" +# # cookie_auth_method = "POST" +# # cookie_auth_username = "username" +# # cookie_auth_password = "pa$$word" +# # cookie_auth_body = '{"username": "user", "password": "pa$$word", "authenticate": "me"}' +# ## cookie_auth_renewal not set or set to "0" will auth once and never renew the cookie +# # cookie_auth_renewal = "5m" + + +# # Gather smart home status from Hue Bridge +# [[inputs.huebridge]] +# ## URL of bridges to query in the form ://:@