From 8a3fd4ba5ee8af970500a6090fbcff1d163e19bf Mon Sep 17 00:00:00 2001 From: Palllladium Date: Thu, 22 May 2025 23:14:06 +0300 Subject: [PATCH 1/2] task completed --- assets/images/grafana.png | Bin 0 -> 297473 bytes assets/images/mqtt_explorer.png | Bin 0 -> 46714 bytes assets/images/mqtt_status.png | Bin 0 -> 10738 bytes assets/images/sensors.png | Bin 0 -> 22251 bytes assets/images/server.png | Bin 0 -> 18244 bytes report.md | 110 + vms/client/simulator/docker-compose.yml | 81 +- vms/client/simulator/entity/sensor.py | 54 - vms/client/simulator/main.py | 27 - vms/client/simulator/requirements.txt | 2 +- vms/client/simulator/sensor.py | 66 + .../mosquitto/docker-compose.yml} | 0 vms/gateway/mosquitto/mosquitto.conf | 2 + vms/server/docker-compose.yml | 53 + vms/server/{infra => }/grafana/grafana.ini | 0 .../provisioning/dashboards/default.yaml | 0 .../grafana/provisioning/dashboards/mqtt.json | 533 + .../provisioning/datasources/default.yaml | 0 vms/server/influxdb/influxdb.conf | 23 + vms/server/infra/docker-compose.yml | 42 - .../grafana/provisioning/dashboards/mqtt.json | 150 - .../infra/influxdb/scripts/influxdb-init.iql | 2 - vms/server/infra/telegraf/telegraf.conf | 9688 ----------------- vms/server/telegraf/telegraf.conf | 23 + 24 files changed, 873 insertions(+), 9983 deletions(-) create mode 100644 assets/images/grafana.png create mode 100644 assets/images/mqtt_explorer.png create mode 100644 assets/images/mqtt_status.png create mode 100644 assets/images/sensors.png create mode 100644 assets/images/server.png create mode 100644 report.md delete mode 100644 vms/client/simulator/entity/sensor.py delete mode 100644 vms/client/simulator/main.py create mode 100644 vms/client/simulator/sensor.py rename vms/{client/simulator/entity/__init__.py => gateway/mosquitto/docker-compose.yml} (100%) create mode 100644 vms/server/docker-compose.yml rename vms/server/{infra => }/grafana/grafana.ini (100%) rename vms/server/{infra => }/grafana/provisioning/dashboards/default.yaml (100%) create mode 100644 vms/server/grafana/provisioning/dashboards/mqtt.json rename vms/server/{infra => }/grafana/provisioning/datasources/default.yaml (100%) create mode 100644 vms/server/influxdb/influxdb.conf delete mode 100644 vms/server/infra/docker-compose.yml delete mode 100644 vms/server/infra/grafana/provisioning/dashboards/mqtt.json delete mode 100644 vms/server/infra/influxdb/scripts/influxdb-init.iql delete mode 100644 vms/server/infra/telegraf/telegraf.conf create mode 100644 vms/server/telegraf/telegraf.conf diff --git a/assets/images/grafana.png b/assets/images/grafana.png new file mode 100644 index 0000000000000000000000000000000000000000..93b7d55761079d590c20c176cc7eff9b744c00ff GIT binary patch literal 297473 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 z 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

8W^I8}TPIO*C4s%r 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

Kw4f(gfJA$PlwkJ$h|YTK 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

m?ZKr^E37F9;|ke!&D)&^U^Ht#akYq|O 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 X@`}5!$1^QYPw@ERlLuAzpS}G*D`k_+ literal 0 HcmV?d00001 diff --git a/assets/images/mqtt_explorer.png b/assets/images/mqtt_explorer.png new file mode 100644 index 0000000000000000000000000000000000000000..561c5c4030ddd820dd86829bd5e83d4ed5baae1b GIT binary patch literal 46714 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 MRCJXq6s_Lo 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 i2Z%09tIbtb8}-Gqr%hf(fy%QA> z>C!uaK!6ZhLQ6u*3-@0C_rJE*o3#?=9FobLJ$uj0_w8@O^z}5(vT(C7F)^Lhe5`87 z#PpXtqaO43DaJd;&_^D|pJQHz8Y)a>{a3M!i@%(db(NWzDxz2^b|)Fvr#&89crh`Z zYdd-!>x2|IFfpl5YN{$5``d2Jf?tSCr*o0PTd_<0<}cE}I(c2TbQdI?4{HA)-*78( zwSsSk*ZF1VyY2IN(d%a~DLjM>EWI9dI}Mp=WIKF%OS=0pzdhiwN6q(IRkod&@4Rm~ z>iA}cvmZZt^4E`Z0wY$8$ybGoV5q8}IbLdA;d{kbY-dQ!<2Yk&sm-nQX z4}K#JA~Z*l9E?If-UY(KRu9oAK>I@m0H9tpp9M6{>mENB|^I^#~yZi&i3%?HkG|4epfJ8Jz%*MB{R^ z!lXXK3QG;;R_4dxVP&$M{O8u2P=*Jrj@}9+#8wv|6}*9D`JyMihy!3^W;j!OU#DibU*1#x`C{usT@8U_M4$U?wnLUxfZw^`l;z0%D303<-TqKsc->76d63A#U4023+#C93L+YGzmayZh<*1E zM1kB6Vq;ja1UjF$NvR%nC%9*{7A<4w3A80XKRDn0QqNd{iw1njE`kbKo%?ze`pnhwqN| zuCNW6aSfT}lzZ084`Xu4BRv6%CZ6cL40u4m!_-!4>}+uwX~8CY#wVc3dvf{!e4?jG z@FkQ2nIThq_s=~5V84~1>NYkP7g2&|;7m+OEH)wRNIdRl6(uH6h$n7lr znC3Ba;f2HQu*~sM1ve?ZV6#w&6u7KS=z~`#J{t{o3cybTz=Z)nv%!L7eL#HTG`%PA zT_|fZ--T(6TMJ$L8tLtrPSD~(saphQgNi!|n5O?4V5hF~VYkqy79V-8H(zUda`>~Z zqfgCL#|)T?-Cj%$kBZo%Z%15N0ifvbyI9RUb*aNw5f%q*tMcJQu0?#v=>a`Fqu3*pDuqzW zhftU8$!$}KVM>QlqmgZXu+-LrxtoeKBYH6{H_+v9IcQ~fcB^2ka13%GZi^6&v!$s%D9$d36 z-o`_aLqdi=@JIbpl^sGRX55w17wSZ^&^;MH30;Xjs+=`&7f(NWVg_>LFsF6^(IT}a z{TCC{aA`4mxf9$i6FT|njxqcWOCKay9Tp!7X!>$!Z}52YCd;BS$gW|Ye2Qy?o}6)= zVosUGQ)!Qy3MuJC#6&Co=eN5Y)1m4WQIHR)6rN+tC^~<=hcJY@Rb)(*r3|=MpmM+i zH!abgQEk4#(s<<_6>3mlTf3Qr*$%Qd(P8g&9|JxPQE0uB-Yvvt`|ctt-3YiD}murF9wHmhO>DTU#~8&#-&VhT7nHx0Mnh3vX+-Z zPv3|(#y<#h3bfqb9{`URq=WZr*A~Q{415}?@$}LVRg^7s%$+y>Njv}(AZ$!bj#{Ad z6Ll!!4OSFoclai2f7U#yqP#F~B*Sqe%cC2mB*e1bPe4O560n)`1AW!NA19v_GYLU0 zOEfqVfFs~YwvK9zr?!UsGG~A(2fU9~te)~bod&jYfK_U_o~5)!vC@LqD2p^gFI-O!Zh0Ix*oAs5zpP{H{= zhz}mFgg2(YYw^ow=}^hvNol3VBYZM?Ve|u7NbA9v)9NAxgXLPqTaB3?J7JFG@C=TQ zaR=)35`u5xX+f${T%+tyy-w_Y_oKH^Hb2NHjqWLzT9whcfP(o4XtGBtQQ5u9Fw?PB z;dfoabtvcbL$ch}qu$4J)_yEY&?TUT`-`Kz-@ zhgCMqbd@FUMTJhsi-#wpXIi=SC%uh|%p#s@eY&(B&RNWAp6{g|WEzoPEwk<*oYgq@ zUWr$Pu>dNiJuJ!~VdVWW#Dv#W~8sX!y?*KTF zh#c1KibXq4q39O}HCjbjGPAyH{?=WiGVeatSrlxbeg?hhAT)E@vMs`875EKSH&>4b z%wOnzLX@>PJTvv`Q#qKAZVy!B3qGuSmbu$fB~9+P0%rnuii@!IR1SP;$AB!76|G>g zl(+o!T7O??uv~yPs<1(~YqZnsYt*-sn1ea$)s~J~G$Q!jT=0S4%y&`dudqvg!I?wu zKr8`q(XJbCl01_Hh-qKoiAGRz#V=aSo~Lc&HrW?)jE^C859(HS-!KpE0`co7kG%RR zW100kd<=ec9l9}jalHL<-N93voh9gn&YOKs0aoPV&pRWP-mc?X#s$?5iDDow!O6h9 z4Xk6XQb=(U_M*N;M?9c;RwYxl#`;P;fQd;;pc1_ti4>6>f_#3_-|vuV3B0iMhR_MK zpR`XW#?CamCMo<8Vz% zCWM>VRiOL870HDhwwL-VId@y?FqZU&7&&pE%rkTE_A;IF*T z-5@^tPKDTnrTv+0_KuwL0%_g8vpz;&AA{gZq@=%;>q)XePN*wBU!iY~xq`;uc|hH2 zoIU-*xsI={*<}p^s5r<-^#?wJSb`1$poq1_u&+Yv#Xkr`WR_>sXVLikhp%@{C^r%` z$ZMO7)j6m9F_>XK%w^etslYNJTmR-17X$vk-$9h7C&Z0x%Mnd3HutCEL^s=grPtCn z3h~cMx_R6cy+(TtJv-&|`Xt=eIqpt3XGx{gCVTM=e|*u^s|Xvi`1K4++nlb1&@`&t z1%8v%e-48X%%J;y0}au8QLX$eh^%dD2=XUNE%P@rSpE^;hk)gpoXW4fm1m{427z43 zNZ$O1=f>`gLB_r>-U?RbxZ3wBQsFYD6M3B_CvfJ3g*iQCLa+faI~{eg8bZJpP9!92 zz(FNO9KobMZiOhYQ_o4r+$nKR-xohc-Xbi1ZoiLif%GEbb~_eRi?PGOxK%l3^iP$2 zgZz}~afKVaPw-L*O60fWrNQWWs3u5lVbm^)`TAe9|<~`>Gh8J4@~k5@~$p8+38yI zI#$7?ZZq9yTju`Zo}}zn3X3@qiSH`gUbytY@zqn_V1L{k)g9*gGu;#23O%puCvuf^ zNHQ9jkkRZYmG^)}Eif}NwMhX0`SdkZY(B)#Y-Zvlz{B%3*&Yoxx^uuPMEtS-8FU`L z2N`0n8Q34W53|%E;|q_|PeBK!fHec)8)ULQ$S=Y!2EuF6vevL2xqE|qX#D+IEY4py zh%ATG>FA{t%FEniV$z9HHkncNjX!Sop1GHDTviuFQb%W_9Z&F{a(9`N{=IZ2nYg%k zPjDA;PIi7-6uM2vZb{U9ZdH2m7~FXVE6i}6_Mr2k?nHra?pd2Fkj-m9-NOgg&4$ro z65l+00GO5U5AqjJQ$_OG9)pkNq3-9GSDh1Opu@cBZ%tY?b5IS?|3IeuzfF!HU@~bd@V%=@;u%l55&&8RPWM6N{53NjdeWL()nOF2}9$7uhKU*WI@(U0;5lc zkgGVszP((25K2G_`r4T@2uj?Ih35^>W83!bJ&(AL;JiCB8%djMTF9X99x}Jc!bQu( zy9bXWeyWo4iw|~BtZ*^$o~r9O3%rmgVAFst>Ksz}R1kn^IK9%oSJvTN9REE7Y*4)F z`YbxGKH1_znEX~-q`9XlFnv=qWy4BGxn{QBBL#PErthTm)MVx*{U9IDT=z4HV=Gu1 z+Ek}&h?14Ug?{ z&pkL)aC)RbKQRehwL%{jrdVyw* zH^r?M34RDo7cJ(lp8{1p8!-uM)k#cD?C(VUa*8mKZLt++H(_DRFU*yt2iwMe+&F(o})`gmmyx;fT{WAOwfo1rH>O7shd>3$FwNQvlsQk zzL`UDfB{Jg+k?F{hf_v0) zo=Gb)5)UYI7MLE1+BH5K2nV&@tlPq!K>7)=oW3;dmvA_^Y<6PGqrZ{?a=q&72ysow z>xZqCi92mO`>K~Ov2b4ezRJl?V~V|FK<4tKK0eXdO4bA)Q@`rU)>l_-`d#0V%s{5RL-003Sc^fB7zxsrRxLg*M zxp03?t?>Q5x9Y*PpgG{E*W=d)smc0{9<-b0Z2)DZ8$X82{*f5zD{ zI=`3$c=}R6Zav8t5!jqFUisvf>sMAz7pzhNA?&f9L-oL?H_U8{ujwxXqT>asDpIz1 zKlB3p=a*ma@&8=cFb9r(-SFDcY@t(RCvC>08oMmv(Ubgc4eUrbB~X>KHjl0Rz-OUt z)QCvpmjzyhj|g9%weO8U$F029Vq?r}S|@brfpJS@!rwZmpQ)|iUPLr1z4>byaRUn< zzyoz0Xm4=#=ETw%LDTx3{KlcjX-avDbY*N+3$^-?8OxX~_6`3r{`;F!2SiP$8;QAN zODx^k9#te{NqEHJc23_@U zN#clVZ9TNeqLcY{|MyMWA)t7-3F%jiJO^?NNYoP($1*S`=)$mMs<%gg3S&J{>>$r} ziHSOuU=YLxc3q>`UaDV|0!5aT~ZLX#I-Od8ljWdF|d zb?-4USgfmVRWUBsk2HPG*o8U#Suvi4o-_Ng4GM_Ss5)XC`kfB9E%laBKw#OBRyKzW z-+#?L8T#n&fj*kXpLZDDS~QHmXW=rNKCBjkdrm>R>SyN)dnb%Jw|WZY@z*@wv8Z77 z1CZta`|dXf9;#Jte|dq)Or~xzPn^ATx@o0uqnu!4gR6mQU0H>VbzwLncQ2q3IWJ~w zkpec}$?}$S@*d^yPQ-bCy)uVp?6v+WPYe~vIy7-CPy>@@JN~kIueoXTtY2*RgL1~E zBAQd7uVmE5#WSOlB5p=0S^wQnQMCC>I-@I5(SBkg{=QR?t8u~oXPC$|NMzlK|C*F= z=Iw*lsv;?@r&CJK{O%jPTVp!bRn~ZKHYa6fMqOXjp>l51uvETr8C$A=*%ZI?bvPFC zF}0=YQ%0tD|NhdhN~Vf#*%JQjn=^k}yvs{PF95<|Xb`SE`-bo{OSP%V-|R{20=bQn z$zzfjg_FLC=maT+0*`zzT|ZI93XNtqaV=?=>C(XenqU(6b&FgI&PP$#%=X3yW#J4S zZ>@+X;9*wa8>togX4o?CiAjlw=+Z7*6Xp`RI3U`lYASMG?0;O!{sH-WSY#@z%Mu}O z9DGDQxLg00j)K^4L#A3c4LyVHXVTWidb*M^HgXktN0ISmsOr|%gJb`7KtR=T6Cc~J zBBovHhZ>Ci)2-`~4GpqXGkS&sH0a~e4)Nb|{i4wS)CD;Hf7D0xh214nnY{xlwR@63 zW=OV39yxDAPDmfo9*+#1X^sh=Vt99bxe;(;#7Gc?TmXu8GPl{G&w>{vHyRZ(XEED2 z=*|=0vW*-aIT>ecpg4Bt>lu0Ksx+)WOEVI_EpeTu8&yr(5t&8qo>)lieXfn7VeoM-Zi>$cZ$sf1Lu6X*1jl}z5jX)Jup$Yh^Uki`4Y`L~ z@f(VQj16}xdk`vLH46*T(@!zLU^e<~U2jgeRY@I9nBx&LbT3Mkob6K$vbcg(Mc5pS2ri#fWKB|?7C!zlz?JJWu`CP z{k5eT6yJ*8(h~PbAoaFE_Fd#bmKXH#bYRP}(ZXo;=4#_`G*WijYlV}A(}lBGQBfHa zfvLC6B@J(;?%VMp?44h~9LXv6qS|P`q)0H`SYZ3Cle!7%0M;F#%RRJl!m2gn-uvIm zX7yH5&ef@rYoH&zT}5I#2JE6qt35YsQf31jjA`G^#qm zOInDNB`X-5#m!mRh`g~aP~XvgT~D(k5EvGa4*_Y2a~xxBpJ&Z4~+u3VcfBq^_R z_XWz9=ld>B4UPs|wQtPJuODrr+H0b%%!iCPCMo?RAHt&q?NE2aBXU)PoRqnGo_qpX z$C#GBpo3!3pWwfB+~g54FDlmFB9NxCMe1^41sK_niqcbLd!ZG7K2q=$=oIC2z7rK% z9sY7ZGs@oHZkkV(cq%mN+5?KBJM}lvq@hvw{rI&36fAh-rQvY>DvX=c7uMIHI8lvY zX~1g4?C|(N3-TY%?f%NRR0kcqMsFTZY_Wki^R(kT!WxyVsksB12jXjF-J5*`&BYZ7 zQAPOO@FwX%Xs)1n)(+~qBp5j1)1S^0)wuYXvU{06Lvr`;aa;3}_^^WzfvNA5p!}#O zOA$avp4pwC0lxRQH!1B4nArFMatJZe)S6_O=m);m#UftDBp+y!?F-Wm9UPJ?b(p=x z@{;BpTPcj|zefnM5p-*4_@XYaEsUExJaH)w*cpnndtVNvU-W|wYs29&_k+>Bj>Oz3 zxQGy4>dg;v?4D@b$Z5XfV8HHnh%?%F#zUy2ob@g0=HSyBH}($b5MZNyhpCnXBhA{!-ms_oT+0Z-Y`MDx~lB?A#- zOXHHwo*&T-61b=77Trb-w&REAt^LF0Y06T4L{gl;%j`k_u6W}BI2SYaSnxs}bvcZ=^{0tcmbukjpo_=0Hrwp_b9xor)rZEosW(g&L~z+wxuxZ(>r^ z=~RB)`@z4Pd}FPFB*LXx+^)9z)-`D$mUOm7={SoEWke7+JrFzz6>L!5Uu@M??!JR=XSt>be#KMqN&?up`A=@OUi;Rpo-%uLY)lqx|jV3T;Yz`s2} zHDS47Ni-)6?s>|S7TZ2>$AH8d(G85XM#f$jp@zj)2Pbr&h=Mz}$Co?Xo5XcnI&2m{ z!zoyp4lgvxh|>rQrlI7YO;!hyjf0TMDZWia~y$joRlNU0vPpqMEE1X{Et3T-#Qy#J;ojUW3j& z#Q_(vU^V_b7DD}C+32}4b35lx1JA>srS)!8!c*dIxpO#(>9i)hL=4T*lVol+KCiy(s->phq@L?kWSZu_scMKrOVqO7 zT$$n5*5;-Oo!}Tge7<(IhAI=*2C(yQ^Y>7&1$W8eCmsjFQsbTU$Ua_zPyO68>plXO z$n*Ygz#A;nAbDz|tX!_6Z>WP!)K(b#PA}-r9wUYtloUDv-!|Cfp=qaz)O6`2h{%OH zS%3Gfj>w8T#FTt{^6m7bTVuf5rrJXUX|Z;KGOGH>M)yb~O9MvC_H z9hmLM55Y}x5_Vhr3LU+Jq_stLpit+4)VJ9A!uka*c1~0S+mp}&>n)dVPOVR(=&|SO z(b6#+r%vwP-~Q<3B`1FIN(;30dj0%Gn~-&FnUZkMgf-%+J8Q&F^$eiF_NA~4%?T46 zCxCLZLuBBju2|=iPxteS^|e>Oet#NCYO7fdGWBCB!`CwVe_9I%oGGkDTo0CAj0S1y zx@O*M*ZojYk)6^_-oaFlgA6Z>zt`E)QSS%5R6e}&4k6?DT^(-Xj-3lcE4bUYD7{Nl z(vyR6|5`lJTq$&_QEdfjGJJ%0 z$$Uj_@|^Y`cPhDZxiS7%lpgT*V5%?4eB!Fp5%#+MdUGFrApzJKy^y+2duD#h2Y&IA zQdn7(#W^GgUfhBvxO)ZGwFx=K;pg$x;Q0hPqGea5R$t=6B=*F_``e$wl&qzijCu`s z?q46=iw30ygG90ru(w=>?>vL4s~Dn&mQu^g_B~OPUcm(!7R|(gM4ul8DNsSkV6Mxz zj#Ftq8a^F7)g#lO%Sr-X(jnQAjoT*&myDu+svXp%?vt-D=?#~q6g9%Z9YIJUA;)ecOept&hGE0+A4&+!D8I|7u%y7L^+_CxYQ&Ej(aAc0iuNPqvkAQZ*DW|ynj;FpUO1)%IHu=)^v!bZg5HFZ% z@@hqA>le)^xOx4Rukdf8j_%}`{jU88D_iN@>L!UW5Zj_vfl7hZtv=lJR(8kPPGR1q z;uXh{({;dtZE5_h_zS8;aFNIS#-}GaEwGQ(D~YKCM)=z;*3Kt4^CMGfawqM<rnaO|h>3mx7M0;qI=qj0! zb=2meqY1!EoG^9b-Zdzk#~}$Ts8icJvnZGzn)YFCt2J9peUdUX&#eQvFn|1+pKV*{ zX_FqTMaHeYe_7*uS9&Q4qo9G$r@K7k*Im<@JqdNc^rgGUcrB4wOXjVRD{Lx{y@FS& zM{3|BCEg}V1#Z2=h3D9>NLQALb^u?93 zp)c{GS!OmXGBT9ps;H$19?ehUUHep==4GYVJHhxwwNk!!!Vh2qGDrntZtS2}aOIGO ztSFlD(+wfpvvWOuY%6QO?=v7Gs~XM!+LXd-opE-XnAF7P-kO!i`~vudj;`esbfF(V z`0husTWGtPnCQ$3*nuhEWLml&wFcS?AI=eF*SI~{aP~3s#{`aDI2zx)jW#WdVxBRH zZEG8UA-_fm+JRp{Y8_PXy{yLiad0yK*h#FXNUf2tg=P%1xuRlMYl1Hs!_F`^9vKJ3 zq`Kg1J}-K`V9>)k&bq7aN*7Xroo|s&N)S{dyg}2P=Cmf$+?k+x?(Dzww*T`m%w%B(Tp zJMv41Uf*DRJ%Mne_muI>x5o@1SkT@E@t+HyhraoniMo()9IV@=0#apXP)$m|fX4(< ziD>MGU*UvM*gx!fYB&w-{HJ|(N)D(C8KiK5g_z#mK^s>}Sc#mrP zLkj#Z)&Q4}V?p$GjXkr+x~*ANnr8mj#Q*!ToZVF}){|s5`rdmoZac|c52IjEYkqcv z&@TEiEkLlTI<0F}wo6qM(Iqmx872*epL;M0@#kxh{yclT2POBbiq>;tYTc9m=Rsn) zEzIr?_Z1HDyNqk;0kUdZq^PVWcMbExrON*mDhxz&{n@c0_3vCbs7FI5<#DUv0G+J`TX0b<0s-Mah5ySF|uu=Kzu20Xga*pQu& z(OXaGDqE68x~w5*!ta)?I~&CcoizGhrQy^p_GdVFb^EPymnI}EgiLj{IfnypYp`mQ z0R~SKR>D)7E*Zc~YQ8Omr|rdy)NDa8ei}GElc~Sc`>$-2x(zSXkT>C0#_5O9KOp-| zSV?^YwFMOq{;5^#?rc=L?xf2$8%kIhj&h_RJ`qx;(b`Z27V2vQ3`iv#j66I z_(ZuFmHs+{ z-dXjH^r*(aar$ld$C~#~nRrUchOo0uqZLRzxPoJm(@T7a%m4lR$wh^vOMsH5Vh%RP z_1bTLtakY?@AyAPNYejbk+i7q`6ntQGW9)ozHJK+`+>x;1c$@~sVj;#0Lr_vSnY~) zR0h+SFdT5^hSUawW7FdifGIY~p7XM1PNiOBe-$=<^}WN)zZ3(pI$-`M_5IWH*iMNv zYh=XIZpAoJHbOv}_Py;Dky(P9ts?kjwp1U!$H=p-yi-Zyq&EJ_uCi=$#-#egg;8qX zF*mZL`nl&$lS=#I?uWERHlfRh;|r+w1ysaI0_WQ3%^IP9b4H9Dnd}zX!wM!oIz>3V zujNH!q?eM;2D7)sLx!+}kr|Sgt8C4a_ZCz4cB5rEjgA4zJxPl>ZG9?mCSkF&i}AS*3MEl0^#MRjZWIt1czF7xS$0~ zJg3cedg6);NfZO+?U^uz;L0eRNeXa7EUv1aiumha6%Q1pl!MdbgAB)%>qCY{8)!<8 zhSHGyc;-Ci{|C1)HXwb!!!VzZ-JLMp>45h#caS@%d|c}2$9*Lcc7r9pquSh!|()D}H?9L<4BVS~M^ORkl zlpkh(>7^X$n_xPYIN}$1V!RN~BBM!IN+$V6j{gIKxyAaKqV!VZY%CISp9LKwaFH2< zgXt8_oFf`Rm6mR`y$ME63tBRQ$pF`1`nsv%xxT!-`0^bdc{R^UZTHI-F`MvJTI54x zBj_BwtWaU1+Eu#A_5LBI3}u6WX6~qUf;>02^*#Fz9r`}O_g>n9YD6uh%PvS)+SD|( zbRgaFcxC~s74qlW@mlP5<05G~%9SR2_qnydE6&24eAy40>>8WxU2E<$ZfBEE;b~P` z$4yu>=mPvtzaYyP+;qc(G}4@_xGp(*iHP>zLI4yEvdZaqoIgQ0Vtx+TSq9P!Ir3e0 z$y%VVs+cHG2V0M?xHNe{TGOIFaHTVSD??nKuE`C|?gnXv}ewYADkEp?V5zoB_M+t8phA#amj*8dL%}Q@ElhiAq2aNhf= z>-W$z&w#-cq}~R_nB3}PHes*>6DLRfMf+pT)471sBgX~=*F1v6JL@Itw>ycvo*D|i?2p^N` z9iz|^2yo|Fok=dW{f!iFlUh~^BAZZgsCtVrSi8imUs@pvJgpSG)6o7N1Og1x)Z-I8 zmd~IMG}%Li0pliULgzp9fy}1@4>1GXc5Hx+q_!6f%^!yF9QTVMUI|_Ny%s;^*Fekr zpfR>rR{{1J6GuD_e=-lnxbZi@1eMLn?1Ex&b&570-Eh*Jv(Pr8cjI_IXQ!m7cboW7 zoH(BqEy4mmbr_XHTxizeT62;A$-e>DCkb`!MK95cP`geu|3p(JCt$`+2vs)dI=eLe zmrkF~`F^lhCcZ58>p+VCoAp4yfk{uh^%N zQ5N?O43~~fy`7<&C0FT zzb{{So~N#@Xk!fcnfJu5?stV}L0|kRp|YHCm+NJaeH4RL0Q;m!o_%^~eK!Yv z;-I4VJRYK`n;Xo@e2nvi9V53Nmzr&6oZU<;S1&J7DF}zVN3QdSM*$`F9{3uYU4S?8 z#VVcC!S!p#%IZ#6HT8G|I!Lm#Mzc;0NX*=fmeQk|G~@>1!glICf0kw}uS)!^k(Q)X zhaDn*WZA3 zzACk%ZXU6+>N#Jb){95{VGsNs4irRR00D1W1+Cp1B3QXcyz<;aa+tP;`* zGRFK~9UW<*wHbRtQ)!m-*sT+zr3wp7wQ#OIZ-_Z?U1nYoYT=Fv~Sh1HJgzUoB6j-4|m$3W&B2s zXLFb4U6l`=tArnwx@U`RiWM`rrJoP>`mrF?6u#8m`jO{d=wgeAIW|?rqVNl{2{h_h zA9HNAJtH(PUm|68J7%0tU6T21Oy}?wusbP1Nm!eBvvb=EI^C zl}0|4q4Xu`JMO?uO3)A@?mWF&Jza^QJ6kAD871u{BHs)jU@eq#D3|@{=j&)UQ1HuX zb-yHizxzc2jvexuv`YRckDA*mAE5;eBfb)&jc2H8sGSQ)!!0_0d%1EKg~mte=?6{( zC?mZNhO5C`S6VU_&_CW3VbG5|PRs{vCZ=+Nj;Yj4c*4J(peE(31RJI|ck>o2@AUc= zY#@dW$7?ryc${m+rHm#iBlFx!faAW`kdSKzhY&s65!zX!`38G3C7GlkgTQ7B3fI+c zDs~q9c%GqGYX8&|=QOv?xnS6sUz(^|-cE)**vA-IH${CZvi8akNLcv_OwTWxL#DnW zE<~mFPJ-4%Y037Ow>CC{b662E+Bfgm@lA@eS(@bW^4GTI;&izZnX7fsWs!jpV@qVj z6re3~IwijKq}aeI|6s<##xeu@M(c0`_I~?RKCo+$>oaqPcruLXbI9i+;Ha>KMzqH6 zO$JTy%f9XZP7@5LBMK;jyO&FdSNzXGrw@8@3&iB`6MDx&UE)ubzGygH5to0QL1jh4 zG%{Cq+olfq(S(&UH%2HBDet$ME?B@)!ZCZ06cg8Gk7m+{+ACj9KMU0| z#2;5)|1ymkrIy>b&Y%f`3^U75Ff+ZveglR1|2DK(UCj&-X3}ZxpX81ACkhQ%g*JaLZwjM&BZYH z$YuXO(QY#Hahf57D>AU9m}Q%300N7ycaAv^rc0mx?=w%5^gS1=b}6?xtvHLS!;NRn zW~+Z3CHKMqeSj(C;0Z%$=Vm&yBZMpxviCoeYLA-#pM9u-g`N z5{|oOZ#U2E4*%XA8)i0QNgEQ8LUJ7LAf4l!nWNRo4c3Tdv=bN~fHaMkld7xGhL!>77 zfzqJdBd$cJFj)wN3{T#-&iK9g(tk>-j5r#lCLA(hdCXDID-%q4h^ri0>@1FSs`y#Kt&~3br+yC?fMR zU%{e=#fD#MYNSb%O3hnYL=?GX}i-xlT8pxj|_r;n1k4W-o5;tb9dkLc6y$ zp7qJh4+8kX25GuF2Nhc zR`4m3v(CSWp7cIN2{c5)cJgn~t2@O(9cTG^JzE%F-h%Re`Hn=X*J-fqvZyt_CDa(21}5CF~1LlZ)mUACg^;q)v+<0co_Gr zXB0yU@IRV!4j^;oXX-v?v77FR1IYvRtl8daPSGbt!Fz0YSC2#B#u1-VRbj-z zY?RefwH>nX&C{h?0i<}zSxI}O(aZHKLvlCL-yb0>Hu@LJ<~`E4#}?j_Hg062Jpc|L zHpm_~3sm{=FL2K|%KyjJZ}2Gh2%hGflQnekWpAhRMRpKui!}VTJsly_OxY35(mIkl zV8fLD-|)Bfcc0z=D*z7y!bw1Ps`HBAe*nC9?7)6F)N>O^9|N~)1wwzhcK5O)HVI~M zEXdFke`_Q71iqL~T|w!&QY6#DdA#P&PF48!HrXlFj|v|+tLG-?6DnK`+62))rMe_S z1^efjXYFO9=#a8RubYswu$w=U4U>iXn^n}(ELedC0bRu$f}KG%^Dcj|?OFc=lKE=Z)jYms5S(1=KT1?9iYx{wbk{9Y+ znlZYFbMT#eb_fS*>`f6^MFBBZb%Yef&e^KY5Eevl`cSvOs$q~Px=;kQD*)NE`s2s) z2Q5;@L9iI_z4Zg~6<>0Ksx_H69`5-aPx6d6<@SwOnR&SLUinvIkM&{JK~!v~!(r!1 zeA`CLZ^4`oaO@&jh^IJfWccRJOu}%uy~U-M3~XI3zSY(fvFQNPmNF0Ege1A~^XmB2>&W>aVvm6R#;Fxve%%QBOqosngU6t!Gn9>C z?XMo+-EU}&j6nVCuX`WiQoiD8X(2_UngnkzL9vr&BP75D1jKZDgd=}W)xGX3Cl}nj ziqID-lBYFZcduHu2x(+T{x` zM=w#dX5K9STC%c^=y?6(nD`0AG^YhIr-018X>WQ%XgobnJ#XI5FPHGyKBQjS5oSHz zK^?cXI2n807uYyVav^NE+VuzzF0>7a0Y%cTd&u5I7G?ZS`g z@qaziLtV^A+L5@p;-HJCi#(b4o-D@RS+=v;Vmx^Q4aXzh)Di7+GC_i-dq_B@fT7p# z<)@1mcw*P4T6Hh)9<8bxQ*67rbqYcIcnNI=IUI1j4J#}&M38S) zW`(v5mfeVjexEvPXixNK=3CB7J=|vxNUm^j?r`U72fg0?w8MUDvbwIG-CEo4&$bFf zIt{M5^Ppf-+J_Py%DtJO?~y7n>7e{vdmRBg&f5etgNM6d+l#PFTem?%u z(|&l#f_S+QTT5R@f%?|qH8t$=`A17#(CrB)qVFVITV<-lE5D?0y&aIj}% zMpA^&wF7S&r;@nKcGc=@jkX_LU-&#pTlG72GMeQ`yL`w()-agHn+zv)gI?Gp6&kk_ zF~F_;#eSe)OV5My=Ta7H-G z@Ia-h2BPSiAHX45Lhf@^J_2Hg z>vl}}?;+6W()HB9=2QJLwjX|2W;6lA0`|z4X3hK+*wp$Hv+>55;639{%mf2b4|6jk zJ^a0FNw06)cYZsP$YYA}f&S<%RsX7uM&5z}p&3;-U>Ct)A=Z~;E=L`n6NfqVi&OwMDlMWt&(WC5TGOtxm|1V z(UM-T)=|zslJpljEa0DA?c`@zTFJxd~4S(D>cV{niOtW{F|ZsLjt23$$m)oFP; z+8bN0e$9@A4uy3TPr`na0G)ydQOr{t3kzXVN^eTGCB&ILAYaeZOR#9EwOte+ttA8H zY&*wC)9j|x7@o-2>Fp=VITIvle{mnENfKHke`rKXp@;bNI_r-om56=7uv{LMrMEVjt?__Xa>1oUq2CDeMTfaEhIqQ=ehi~a(RUaAO=F!n1 z&h*MId7l!&x=9%mhPkp6ESbKZZ3-UMCb!u@jfPIJg))_8W^1s zbJvpX2ysr+$-sH+2`e{*m%%3Te41xUKW1BB0o_B^P5d?4;ygPC#G%_WDX zng1@^u+x+M+#lgvvESC&zx@WYa*|YL_w3%kTELDLaI4m0(B4$Dz};b=N-|H0tqzIJ z3;>=s0qpaI)VvItSI~OyRj8xh`T3xoPmiAiC%-MG+J4QNxCzuYiJht)2x*y2zmost zS-IJlIVq=MZss|4LMv~F>uKOtqLsf5O0BMgYTmNCz`AnicDA{|ol&w|zoeAa?s&Tr zGUI&3W}VN&Q}fJBR|Xk~>Qt8;dwpp?XY@Vbp!h}L#PQj)b8l4T9b7rXbCV4;qz^0r z_T<{Mvv$a->|YhN0odpLVr|9-o+ZElyy|J#dRJ>4^B-jyBG zVg0lhM_;h3pPL@K)IGLz_ANV~Z)V!-UR3_uJ#0#V|!s1IjncP5t=nQ z>~op8+DG72TJhuvq$%aHOFEo$ZTPA%5+3xLBd z5O6sMKC&bCP{O?X^OURgR@1~Z+;czm`@?pU7)^V2h0~UJY4<@w^uwBP~53w22$YZ>gTe~DWM4fB2PDv literal 0 HcmV?d00001 diff --git a/report.md b/report.md new file mode 100644 index 0000000..a7fa228 --- /dev/null +++ b/report.md @@ -0,0 +1,110 @@ +# Отчёт по работе №2: Практика Docker +**Цель:** создать систему мониторинга системы датчиков с использованием Docker, Mosquitto, InfluxDB, Telegraf и Grafana на трёх виртуальных машинах (далее ВМ). + +## Подготовка ВМ +1. Взяты три ВМ из работы №1 (предварительно настроены в формате client, server, gateway). +2. Необходимо установить на каждую ВМ Docker и Docker Compose посредством: +```shell +sudo apt update +sudo apt upgrade -y +sudo apt install -y docker.io +sudo systemctl enable docker +sudo systemctl start docker +docker --version +sudo usermod -aG docker $USER +sudo apt install -y docker-compose +docker-compose --version +``` + +## Настройка vmA (client) - Система сенсоров +1. Создаём папку для приложения (у меня `/sensor-sim`). +2. Далее подготавливаем файлы самого приложения: + 1. `requirements.txt` в одну строку: `paho-mqtt`. + 2. `Dockerfile` для сборки образа и установки зависимости. + 3. Сам скрипт `sensor.py`, в котором описан базовый класс **Sensor** и его наследники. Чтение конфигурации происходит из **env-переменных**. + +3. Далее необходимо собрать образ и опубликовать его на Docker Hub: +```shell +docker login +docker build -t palllladium/sensor-sim:latest . +docker push palllladium/sensor-sim:latest +``` + +4. После этого создаём `docker-compose.yml` для запуска контейнеров из опубликованного образа.
+Каждый контейнер имеет свои env-переменные: SENSOR_TYPE, SENSOR_NAME и т.д.
+Получаем такую картину: + +![Запущенные контейнеры с сенсорами](assets/images/sensors.png) + +## Настройка vmB (gateway) - MQTT Broker +1. Создаём папку для MQTT Broker (у меня `/mosquitto`). +2. Далее подготавливаем конфиг (по заданию) и `docker-compose.yml` +3. Также запускаем контейнер и проверяем открытость порта 1883: + +![MQTT Status](assets/images/mqtt_status.png) + +В MQTT Explorer можно увидеть, что значения с сенсоров поступают корректно: + +![MQTT Explorer](assets/images/mqtt_explorer.png) + +## Настройка vmC (server) - Мониторинг + +1. Создаём подобную структуру папок: +```shell +server/ +├── docker-compose.yml +├── influxdb/ +│ ├── influxdb.conf +│ ├── data/ +│ ├── meta/ +│ └── wal/ +├── telegraf/ +│ └── telegraf.conf +├── grafana/ +│ ├── provisioning/ +│ │ ├── datasources/ +│ │ │ └── default.yaml +│ │ └── dashboards/ +│ │ ├── default.yaml +│ │ └── dashboard.json +``` + +- Здесь важно было после запуска контейнера `influxdb` создать базу данных вручную при помощи: +```shell +CREATE database sensors +USE sensors +CREATE USER telegraf WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES +``` +- И сконфигурировать `telegraf.conf`, изменив: +```shell +[[outputs.influxdb]] + urls = ["http://influxdb:8086"] # здесь уже указан alias + database = "sensors" + username = "telegraf" + password = "telegraf" + +[[inputs.mqtt_consumer]] + servers = ["tcp://192.168.0.150:1883"] # IP ВМ с MQTT + topics = ["/sensor/+"] + data_format = "value" + data_type = "float" +``` + +2. В `docker-compose.yml` файле указываем одну сеть для всех контейнеров и указываем отдельно именнованые тома для **Grafana** и **InfluxDB**, также монтируем для обоих контейнеров ранее написанные конфиги. +3. После `docker-compose up -d` необходимо зайти на `http://192.168.0.149:3000` (где уже ожидает графический интерфейс **Grafana**) и сконфигурировать вручную дашборд, предварительно добавив источник данных из **InfluxDB**. +4. JSON созданного дашборда экспортируем и сохраняем в `.../grafana/provisioning/dashboards/dashboard.json`. +5. Перезапускаем контейнер с **Grafana**. + +![Server](assets/images/server.png) + +## Тестирование + +1. И в теории, и на практике данные генерируются на vmA (работы сенсоров), поступают на vmB (**MQTT Broker**), а далее поступают на vmC (считываются **Telegraf** и сохраняются в **InfluxDB**), отображение же уже происходит в **Grafana** на заранее сконфигурированном дашборде. +2. У всех контейнеров также реализовано сохранение настроек при помощи `restart: unless-stopped` в `docker-compose.yml`. + +Финальные результаты работы: + +![Grafana](assets/images/Grafana.png) + +Представленные скриншоты подтверждают работоспособность системы. +Все необходимые файлы приложены в репозитории. \ No newline at end of file diff --git a/vms/client/simulator/docker-compose.yml b/vms/client/simulator/docker-compose.yml index b9e08bb..1a31a70 100644 --- a/vms/client/simulator/docker-compose.yml +++ b/vms/client/simulator/docker-compose.yml @@ -1,24 +1,67 @@ -version: "3" +version: '3.3' services: - temp_sensor: - image: antonaleks/data-simulator + sensor1: + build: . environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=TIRCAHL24 - - SIM_PERIOD=5 - - SIM_TYPE=temperature - pressure_sensor: - image: antonaleks/data-simulator + SENSOR_TYPE: temperature + SENSOR_NAME: temp_1 + INTERVAL: 3 + BROKER_HOST: 192.168.0.150 + networks: + - default + + sensor2: + build: . environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=PIRCAHL11 - - SIM_PERIOD=10 - - SIM_TYPE=pressure - current_sensor: - image: antonaleks/data-simulator + SENSOR_TYPE: pressure + SENSOR_NAME: pressure_1 + INTERVAL: 4 + BROKER_HOST: 192.168.0.150 + networks: + - default + + sensor3: + build: . environment: - - SIM_HOST=192.168.1.1 - - SIM_NAME=A0_CURRENT - - SIM_PERIOD=1 - - SIM_TYPE=current + SENSOR_TYPE: humidity + SENSOR_NAME: hum_1 + INTERVAL: 5 + BROKER_HOST: 192.168.0.150 + networks: + - default + + sensor4: + build: . + environment: + SENSOR_TYPE: current + SENSOR_NAME: curr_1 + INTERVAL: 2 + BROKER_HOST: 192.168.0.150 + networks: + - default + + sensor5: + build: . + environment: + SENSOR_TYPE: temperature + SENSOR_NAME: temp_2 + INTERVAL: 3 + BROKER_HOST: 192.168.0.150 + networks: + - default + + sensor6: + build: . + environment: + SENSOR_TYPE: pressure + SENSOR_NAME: pressure_2 + INTERVAL: 6 + BROKER_HOST: 192.168.0.150 + networks: + - default + +networks: + default: + external: + name: iot_net \ No newline at end of file diff --git a/vms/client/simulator/entity/sensor.py b/vms/client/simulator/entity/sensor.py deleted file mode 100644 index 922fea5..0000000 --- a/vms/client/simulator/entity/sensor.py +++ /dev/null @@ -1,54 +0,0 @@ -import random - - -class Sensor: - value: float - name: str - type: str - - def __init__(self, name): - self.name = name - - def generate_new_value(self): - pass - - def get_data(self): - return self.value - - def __str__(self): - return {"type": self.type, "name": self.name, "value": self.value} - - -class Temperature(Sensor): - step = 25 - - def __init__(self, name): - super().__init__(name) - self.type = "temp" - - def generate_new_value(self): - self.value = random.random() + self.step - - -class Pressure(Sensor): - step = 55 - - def __init__(self, name): - super().__init__(name) - self.type = "pressure" - - def generate_new_value(self): - self.value = random.random() + self.step - 56.48 + 25 * 7 - - -class Current(Sensor): - step = 0 - - def __init__(self, name): - super().__init__(name) - self.type = "current" - - def generate_new_value(self): - import math - self.value = math.sin(self.step) - self.step = self.step + 1 diff --git a/vms/client/simulator/main.py b/vms/client/simulator/main.py deleted file mode 100644 index 4d17730..0000000 --- a/vms/client/simulator/main.py +++ /dev/null @@ -1,27 +0,0 @@ -import paho.mqtt.client as paho -from os import environ -import time - -from entity.sensor import * - -broker = "localhost" if "SIM_HOST" not in environ.keys() else environ["SIM_HOST"] -port = 1883 if "SIM_PORT" not in environ.keys() else int(environ["SIM_PORT"]) -name = "sensor" if "SIM_NAME" not in environ.keys() else environ["SIM_NAME"] -period = 1 if "SIM_PERIOD" not in environ.keys() else int(environ["SIM_PERIOD"]) -type_sim = "temperature" if "SIM_TYPE" not in environ.keys() else environ["SIM_TYPE"] -sensors = {"temperature": Temperature, "pressure": Pressure, "current": Current} - - -def on_publish(client, userdata, result): # create function for callback - print(f"data published {userdata}") - pass - - -sensor = sensors[type_sim](name=name) -client1 = paho.Client(sensor.name) # create client object -client1.on_publish = on_publish # assign function to callback -client1.connect(broker, port) # establish connection -while True: - sensor.generate_new_value() - ret = client1.publish("sensors/" + sensor.type + "/" + sensor.name, sensor.get_data()) # publish - time.sleep(period) diff --git a/vms/client/simulator/requirements.txt b/vms/client/simulator/requirements.txt index 13e9d8e..c0f8d04 100644 --- a/vms/client/simulator/requirements.txt +++ b/vms/client/simulator/requirements.txt @@ -1 +1 @@ -paho_mqtt==1.6.1 +paho_mqtt diff --git a/vms/client/simulator/sensor.py b/vms/client/simulator/sensor.py new file mode 100644 index 0000000..7d76c7c --- /dev/null +++ b/vms/client/simulator/sensor.py @@ -0,0 +1,66 @@ +import os +import time +import random +import json +import paho.mqtt.client as mqtt +from datetime import datetime + +class Sensor: + def __init__(self, name, interval): + self.name = name + self.interval = interval + + def generate(self): + return round(random.uniform(10.0, 30.0), 2) + + def read(self): + return { + "name": self.name, + "value": self.generate(), + "timestamp": datetime.utcnow().isoformat() + "Z" + } + +class TemperatureSensor(Sensor): + def generate(self): + return round(random.uniform(20.0, 40.0), 2) + +class PressureSensor(Sensor): + def generate(self): + return round(1000 + random.random() * 50, 2) + +class CurrentSensor(Sensor): + def generate(self): + return round(random.uniform(0.1, 10.0), 2) + +class HumiditySensor(Sensor): + def generate(self): + return round(random.uniform(30.0, 90.0), 2) + +SENSOR_TYPES = { + "temperature": TemperatureSensor, + "pressure": PressureSensor, + "current": CurrentSensor, + "humidity": HumiditySensor, +} + +# Параметры из переменных окружения +sensor_type = os.getenv("SENSOR_TYPE", "temperature") +sensor_name = os.getenv("SENSOR_NAME", "sensor1") +interval = int(os.getenv("INTERVAL", 5)) +broker_host = os.getenv("BROKER_HOST", "192.168.0.150") +broker_port = int(os.getenv("BROKER_PORT", 1883)) + +SensorClass = SENSOR_TYPES.get(sensor_type, Sensor) +sensor = SensorClass(sensor_name, interval) + +client = mqtt.Client() +client.connect(broker_host, broker_port, 60) + +topic = f"/sensor/{sensor_type}" + +while True: + payload = json.dumps(sensor.read()) + client.publish(topic, payload) + print(json.dumps(sensor.read(), indent=2)) # отладочный вывод + print(f"[{sensor_name}] -> {topic}: {payload}") + time.sleep(interval) \ No newline at end of file diff --git a/vms/client/simulator/entity/__init__.py b/vms/gateway/mosquitto/docker-compose.yml similarity index 100% rename from vms/client/simulator/entity/__init__.py rename to vms/gateway/mosquitto/docker-compose.yml diff --git a/vms/gateway/mosquitto/mosquitto.conf b/vms/gateway/mosquitto/mosquitto.conf index c8348ac..cf48b88 100644 --- a/vms/gateway/mosquitto/mosquitto.conf +++ b/vms/gateway/mosquitto/mosquitto.conf @@ -1,2 +1,4 @@ listener 1883 allow_anonymous true +persistence false +log_dest stdout \ No newline at end of file diff --git a/vms/server/docker-compose.yml b/vms/server/docker-compose.yml new file mode 100644 index 0000000..e1cf936 --- /dev/null +++ b/vms/server/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.3' + +services: + influxdb: + image: influxdb:1.8 + container_name: influxdb + ports: + - "8086:8086" + volumes: + - influxdb-data:/var/lib/influxdb + command: influxd -config /etc/influxdb/influxdb.conf + environment: + - INFLUXDB_DB=sensors + - INFLUXDB_ADMIN_ENABLED=true + - INFLUXDB_ADMIN_USER=admin + - INFLUXDB_ADMIN_PASSWORD=admin + - INFLUXDB_USER=telegraf + - INFLUXDB_USER_PASSWORD=telegraf + networks: + - default + restart: unless-stopped + + telegraf: + image: telegraf:latest + container_name: telegraf + depends_on: + - influxdb + volumes: + - ./telegraf/telegraf.conf:/etc/telegraf/telegraf.conf:ro + networks: + - default + restart: unless-stopped + + grafana: + image: grafana/grafana:latest + container_name: grafana + ports: + - "3000:3000" + volumes: + - grafana-data:/var/lib/grafana + - ./grafana/provisioning:/etc/grafana/provisioning + networks: + - default + restart: unless-stopped + +volumes: + influxdb-data: + grafana-data: + +networks: + default: + external: + name: iot_net \ No newline at end of file diff --git a/vms/server/infra/grafana/grafana.ini b/vms/server/grafana/grafana.ini similarity index 100% rename from vms/server/infra/grafana/grafana.ini rename to vms/server/grafana/grafana.ini diff --git a/vms/server/infra/grafana/provisioning/dashboards/default.yaml b/vms/server/grafana/provisioning/dashboards/default.yaml similarity index 100% rename from vms/server/infra/grafana/provisioning/dashboards/default.yaml rename to vms/server/grafana/provisioning/dashboards/default.yaml diff --git a/vms/server/grafana/provisioning/dashboards/mqtt.json b/vms/server/grafana/provisioning/dashboards/mqtt.json new file mode 100644 index 0000000..e33e0bb --- /dev/null +++ b/vms/server/grafana/provisioning/dashboards/mqtt.json @@ -0,0 +1,533 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + } + ] + }, + "description": "For lab", + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1, + "links": [], + "panels": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "orange", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "/sensor/humidity" + } + ] + } + ], + "title": "Humidity sensor", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "green", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 980, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 0 + }, + "id": 4, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "/sensor/pressure" + } + ] + } + ], + "title": "Pressure sensor", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "yellow", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "max": 12, + "min": -2, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 8 + }, + "id": 3, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "/sensor/current" + } + ] + } + ], + "title": "Current sensor", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "purple", + "mode": "fixed" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 25, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineStyle": { + "fill": "solid" + }, + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 15, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 8 + }, + "id": 5, + "options": { + "legend": { + "calcs": [ + "mean", + "min", + "max" + ], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "12.0.0+security-01", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "P4B5EB7AC8565B06F" + }, + "groupBy": [], + "measurement": "mqtt_consumer", + "orderByTime": "ASC", + "policy": "default", + "refId": "A", + "resultFormat": "time_series", + "select": [ + [ + { + "params": [ + "value" + ], + "type": "field" + } + ] + ], + "tags": [ + { + "key": "topic::tag", + "operator": "=", + "value": "/sensor/temperature" + } + ] + } + ], + "title": "Temperature sensor", + "type": "timeseries" + } + ], + "preload": false, + "schemaVersion": 41, + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "browser", + "title": "DockerPractice", + "uid": "4f09c1f0-0fa3-428f-8a0f-bdc9ddc86ee6", + "version": 6 +} \ No newline at end of file diff --git a/vms/server/infra/grafana/provisioning/datasources/default.yaml b/vms/server/grafana/provisioning/datasources/default.yaml similarity index 100% rename from vms/server/infra/grafana/provisioning/datasources/default.yaml rename to vms/server/grafana/provisioning/datasources/default.yaml diff --git a/vms/server/influxdb/influxdb.conf b/vms/server/influxdb/influxdb.conf new file mode 100644 index 0000000..435cca1 --- /dev/null +++ b/vms/server/influxdb/influxdb.conf @@ -0,0 +1,23 @@ +reporting-disabled = true +bind-address = "127.0.0.1:8088" + +[meta] + dir = "/var/lib/influxdb/meta" + +[data] + dir = "/var/lib/influxdb/data" + wal-dir = "/var/lib/influxdb/wal" + trace-logging-enabled = false + +[http] + enabled = true + bind-address = ":8086" + auth-enabled = true + log-enabled = true + write-tracing = false + pprof-enabled = false + https-enabled = false + +[logging] + level = "info" + file = "stderr" \ No newline at end of file diff --git a/vms/server/infra/docker-compose.yml b/vms/server/infra/docker-compose.yml deleted file mode 100644 index 94e705e..0000000 --- a/vms/server/infra/docker-compose.yml +++ /dev/null @@ -1,42 +0,0 @@ -version: "3" -services: - influxdb: - image: influxdb:1.8 - container_name: influxdb - volumes: - - ./influxdb/scripts:/docker-entrypoint-initdb.d - - influx_data:/var/lib/influxdb - networks: - - server-net - telegraf: - image: telegraf - container_name: telegraf - volumes: - - ./telegraf:/etc/telegraf:ro - restart: unless-stopped - networks: - - server-net - grafana: - image: grafana/grafana - container_name: grafana - volumes: - - grafana_data:/var/lib/grafana - - ./grafana/:/etc/grafana/ - - environment: - - GF_SECURITY_ADMIN_USER=admin - - GF_SECURITY_ADMIN_PASSWORD=admin - - GF_USERS_ALLOW_SIGN_UP=false - restart: unless-stopped - ports: - - 3000:3000 - networks: - - server-net - - -volumes: - influx_data: {} - grafana_data: {} - -networks: - server-net: {} \ No newline at end of file diff --git a/vms/server/infra/grafana/provisioning/dashboards/mqtt.json b/vms/server/infra/grafana/provisioning/dashboards/mqtt.json deleted file mode 100644 index ec65ac0..0000000 --- a/vms/server/infra/grafana/provisioning/dashboards/mqtt.json +++ /dev/null @@ -1,150 +0,0 @@ -{ - "annotations": { - "list": [ - { - "builtIn": 1, - "datasource": "-- Grafana --", - "enable": true, - "hide": true, - "iconColor": "rgba(0, 211, 255, 1)", - "name": "Annotations & Alerts", - "target": { - "limit": 100, - "matchAny": false, - "tags": [], - "type": "dashboard" - }, - "type": "dashboard" - } - ] - }, - "editable": true, - "fiscalYearStartMonth": 0, - "graphTooltip": 0, - "links": [], - "liveNow": false, - "panels": [ - { - "datasource": { - "type": "influxdb", - "uid": "P4B5EB7AC8565B06F" - }, - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 12, - "x": 0, - "y": 0 - }, - "id": 2, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom" - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "influxdb", - "uid": "P4B5EB7AC8565B06F" - }, - "groupBy": [], - "measurement": "mqtt_consumer", - "orderByTime": "ASC", - "policy": "default", - "refId": "A", - "resultFormat": "time_series", - "select": [ - [ - { - "params": [ - "value" - ], - "type": "field" - } - ] - ], - "tags": [ - { - "key": "topic", - "operator": "=", - "value": "sensors/current/A0_CURRENT" - } - ] - } - ], - "title": "Panel Title", - "type": "timeseries" - } - ], - "schemaVersion": 35, - "style": "dark", - "tags": [], - "templating": { - "list": [] - }, - "time": { - "from": "now-5m", - "to": "now" - }, - "timepicker": {}, - "timezone": "", - "title": "New dashboard", - "version": 0, - "weekStart": "" -} \ No newline at end of file diff --git a/vms/server/infra/influxdb/scripts/influxdb-init.iql b/vms/server/infra/influxdb/scripts/influxdb-init.iql deleted file mode 100644 index 0e0fb65..0000000 --- a/vms/server/infra/influxdb/scripts/influxdb-init.iql +++ /dev/null @@ -1,2 +0,0 @@ -CREATE database sensors -CREATE USER telegraf WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES \ No newline at end of file diff --git a/vms/server/infra/telegraf/telegraf.conf b/vms/server/infra/telegraf/telegraf.conf deleted file mode 100644 index ddd8b05..0000000 --- a/vms/server/infra/telegraf/telegraf.conf +++ /dev/null @@ -1,9688 +0,0 @@ -# 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 target controls the destination for logs and can be one of "file", - ## "stderr" or, on Windows, "eventlog". When set to "file", the output file - ## is determined by the "logfile" setting. - # logtarget = "file" - - ## Name of the file to be logged to when using the "file" logtarget. If set to - ## the empty string then logs are written to stderr. - # 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 = "0d" - - ## 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" which - ## translates by calling external programs snmptranslate and snmptable, - ## or "gosmi" which translates using the built-in gosmi library. - # snmp_translator = "netsnmp" - -############################################################################### -# OUTPUT PLUGINS # -############################################################################### - - -# Configuration for sending metrics to InfluxDB -[[outputs.influxdb]] -urls = ["http://influxdb:8086"] # адрес докера с influxdb (указать alias при docker-compose, ip адрес для docker run) -database = "sensors" -skip_database_creation = true -username = "telegraf" -password = "telegraf" - ## 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"] - - ## 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, - ## i.e.: "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 - - -# # 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 -# -# ## 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 -# -# ## 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" - - -# # Sends metrics to Azure Data Explorer -# [[outputs.azure_data_explorer]] -# ## Azure Data Explorer cluster endpoint -# ## ex: endpoint_url = "https://clustername.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 i.e. table ingestor role. -# # create_tables = true - - -# # 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 appropriate REST endpoint for receiving -# ## metrics. (Note: region may be unused in this context) -# # endpoint_url = "https://monitoring.core.usgovcloudapi.net" - - -# # 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 = "my-gcp-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 = "_" - - -# # 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" -# -# ## 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#PublishSettings -# -# ## Optional. Send a request to PubSub (i.e. 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 (i.e. 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 -# -# ## 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 = "" -# -# ## 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. -# ## ex: 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 log stream is not exist, it will be created. -# ## Since AWS is not automatically delete logs streams with expired logs entries (i.e. empty log stream) -# ## 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]] -# # A github.com/jackc/pgx/v4 connection string. -# # See https://pkg.go.dev/github.com/jackc/pgx/v4#ParseConfig -# 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 = true -# # 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. -# # url = "https://app.datadoghq.com/api/v1/series" -# -# ## Set http_proxy (telegraf uses the system wide proxy settings if it isn't set) -# # http_proxy_url = "http://localhost:8888" -# -# ## Override the default (none) compression used to send data. -# ## Supports: "zlib", "none" -# # compression = "none" - - -# # 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 = [ ] -# -# ## 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" -# ## 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 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 diferent 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" - - -# # Configuration for Event Hubs output plugin -# [[outputs.event_hubs]] -# ## The full connection string to the Event Hub (required) -# ## 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" -# -# ## Client timeout (defaults to 30s) -# # 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"] -# -# ## Timeout for command to complete. -# # timeout = "5s" -# -# ## 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]] -# ## Program to run as daemon -# command = ["my-telegraf-output", "--some-flag", "value"] -# -# ## Delay before the process is restarted after an unexpected termination -# restart_delay = "10s" -# -# ## 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 metric groups. -# # 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 = "0d" -# -# ## 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" - - -# # Configuration for Graphite server to send metrics to -# [[outputs.graphite]] -# ## TCP endpoint for your graphite instance. -# ## If multiple endpoints are configured, output will be load balanced. -# ## Only one of the endpoints will be written to with each iteration. -# servers = ["localhost:2003"] -# ## 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" -# -# ## Enable Graphite tags support -# # graphite_tag_support = false -# -# ## Define how metric names and tags are sanitized; options are "strict", or "compatible" -# ## strict - Default method, and backwards compatible with previous versionf of Telegraf -# ## compatible - More relaxed sanitizing when using tags, and compatible with the graphite spec -# # 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 = 2 -# -# ## 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 -# -# ## 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 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" -# -# ## 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 metrics over HTTP -# [[outputs.http]] -# ## URL is the address to send metrics to -# url = "http://127.0.0.1:8080/telegraf" -# -# ## Timeout for HTTP message -# # timeout = "5s" -# -# ## HTTP method, one of: "POST" or "PUT" -# # method = "POST" -# -# ## HTTP Basic Auth credentials -# # username = "username" -# # password = "pa$$word" -# -# ## OAuth2 Client Credentials Grant -# # client_id = "clientid" -# # client_secret = "secret" -# # token_url = "https://indentityprovider/oauth2/v1/token" -# # scopes = ["urn:opc:idm:__myscopes__"] -# -# ## 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 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 = "5m" -# -# ## 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" -# -# ## Additional HTTP headers -# # [outputs.http.headers] -# # # Should be set manually to "application/json" for json data_format -# # Content-Type = "text/plain; charset=utf-8" -# -# ## Idle (keep-alive) connection timeout. -# ## Maximum amount of time before idle connection is closed. -# ## Zero means no limit. -# # idle_conn_timeout = 0 -# -# ## 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 = "" - - -# # Configuration for sending metrics to InfluxDB -# [[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"] -# -# ## Token for authentication. -# token = "" -# -# ## Organization is the name of the organization you wish to write to; must exist. -# 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 -# -# ## 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 - - -# # 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" -# ## Display Communication to Instrumental -# debug = false - - -# # Configuration for the Kafka server to send metrics to -# [[outputs.kafka]] -# ## URLs of kafka brokers -# brokers = ["localhost:9092"] -# ## Kafka topic for producer messages -# topic = "telegraf" -# -# ## The value of this tag will be used as the topic. If not set 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 interest, lz4 compression -# ## requires at least version 0.10.0.0. -# ## ex: version = "1.1.0" -# # version = "" -# -# ## 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 = "_" -# -# ## 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 prefered 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 -# -# ## 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 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 = "kafka" -# # sasl_password = "secret" -# -# ## Optional SASL: -# ## one of: OAUTHBEARER, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI -# ## (defaults to PLAIN) -# # sasl_mechanism = "" -# -# ## used if sasl_mechanism is GSSAPI (experimental) -# # 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 (experimental) -# # sasl_access_token = "" -# -# ## SASL protocol version. When connecting to Azure EventHub set to 0. -# # sasl_version = 1 -# -# # Disable Kafka metadata full fetch -# # metadata_full = 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" - - -# # 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" -# -# ## 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" -# -# -# ## 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 - - -# # 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" -# - - -# # Send aggregate metrics 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" - - -# # Send 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" - - -# # Sends metrics to MongoDB -# [[outputs.mongodb]] -# # connection string examples for mongodb -# dsn = "mongodb://localhost:27017" -# # dsn = "mongodb://mongod1:27017,mongod2:27017,mongod3:27017/admin&replicaSet=myReplSet&w=1" -# -# # overrides serverSelectionTimeoutMS in dsn if set -# # timeout = "30s" -# -# # default authentication, optional -# # authentication = "NONE" -# -# # for SCRAM-SHA-256 authentication -# # authentication = "SCRAM" -# # username = "root" -# # password = "***" -# -# # for x509 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" -# -# # optionally set a TTL to automatically expire documents from the measurement collections. -# # ttl = "360h" - - -# # 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 '{host}:{port}'. For -# ## example, "localhost:1883" or "127.0.0.1:8883". -# servers = ["localhost:1883"] -# -# ## MQTT Topic for Producer Messages -# ## MQTT outputs send metrics to this topic format: -# ## /// (e.g. prefix/web01.example.com/mem) -# topic_prefix = "telegraf" -# -# ## 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, metrics will be sent in one MQTT message per flush. Otherwise, -# ## metrics are written one metric per MQTT message. -# # batch = false -# -# ## When true, metric will have RETAIN flag set, making broker cache entries until someone -# ## actually reads it -# # retain = false -# -# ## 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 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 = "/etc/telegraf/nats.creds" -# -# ## NATS subject for producer messages -# 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 -# -# ## 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 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" - - -# # Send OpenTelemetry metrics over gRPC -# [[outputs.opentelemetry]] -# ## Override the default (localhost:4317) OpenTelemetry gRPC service -# ## address:port -# # service_address = "localhost:4317" -# -# ## 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 keypairs 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" -# -# ## 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 = "_" - - -# # Configuration for the Prometheus client to spawn -# [[outputs.prometheus_client]] -# ## Address to listen on -# listen = ":9273" -# -# ## Metric version controls the mapping from Telegraf metrics into -# ## Prometheus format. When using the prometheus input, use the same value in -# ## both plugins to ensure metrics are round-tripped without modification. -# ## -# ## example: metric_version = 1; -# ## metric_version = 2; recommended version -# # 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 -# -# ## 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 - - -# # Configuration for the Riemann server 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" - - -# # Configuration for the Riemann server to send metrics to -# [[outputs.riemann_legacy]] -# ## DEPRECATED: The 'riemann_legacy' plugin is deprecated in version 1.3.0, use 'outputs.riemann' instead (see https://github.com/influxdata/telegraf/issues/1878). -# ## URL of server -# url = "localhost:5555" -# ## transport protocol to use either tcp or udp -# transport = "tcp" -# ## separator to use between input name and field name in Riemann service name -# separator = " " - - -# # 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" -# -# ## 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.metatadata.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 precident 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" -# -# ## 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 packet-based connections (i.e. UDP, unixgram). -# ## 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_INPUT.md -# # data_format = "influx" - - -# # Send metrics to 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 -# # 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) -# # table_template = "CREATE TABLE {TABLE}({COLUMNS})" -# -# ## Table existence check template -# ## Available template variables: -# ## {TABLE} - tablename as a quoted identifier -# # table_exists_template = "SELECT 1 FROM {TABLE} LIMIT 1" -# -# ## Initialization SQL -# # init_sql = "" -# -# ## 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" -# -# ## The namespace for the metric descriptor -# namespace = "telegraf" -# -# ## Custom resource type -# # resource_type = "generic_node" -# -# ## Additional resource labels -# # [outputs.stackdriver.resource_labels] -# # node_id = "$HOSTNAME" -# # namespace = "myapp" -# # location = "eu-north0" - - -# # A plugin that can transmit metrics to Sumo Logic HTTP Source -# [[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 octect-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 Amazon Timestream output. -# [[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 -# -# ## The mapping mode specifies how Telegraf records are represented in Timestream. -# ## Valid values are: single-table, multi-table. -# ## For example, consider the following data in line protocol format: -# ## weather,location=us-midwest,season=summer temperature=82,humidity=71 1465839830100400200 -# ## airquality,location=us-west no2=5,pm25=16 1465839830100400200 -# ## where weather and airquality are the measurement names, location and season are tags, -# ## and temperature, humidity, no2, pm25 are fields. -# ## In multi-table mode: -# ## - first line will be ingested to table named weather -# ## - second line will be ingested to table named airquality -# ## - the tags will be represented as dimensions -# ## - first table (weather) will have two records: -# ## one with measurement name equals to temperature, -# ## another with measurement name equals to humidity -# ## - second table (airquality) will have two records: -# ## one with measurement name equals to no2, -# ## another with measurement name equals to pm25 -# ## - the Timestream tables from the example will look like this: -# ## TABLE "weather": -# ## time | location | season | measure_name | measure_value::bigint -# ## 2016-06-13 17:43:50 | us-midwest | summer | temperature | 82 -# ## 2016-06-13 17:43:50 | us-midwest | summer | humidity | 71 -# ## TABLE "airquality": -# ## time | location | measure_name | measure_value::bigint -# ## 2016-06-13 17:43:50 | us-west | no2 | 5 -# ## 2016-06-13 17:43:50 | us-west | pm25 | 16 -# ## In single-table mode: -# ## - the data will be ingested to a single table, which name will be valueOf(single_table_name) -# ## - measurement name will stored in dimension named valueOf(single_table_dimension_name_for_telegraf_measurement_name) -# ## - location and season will be represented as dimensions -# ## - temperature, humidity, no2, pm25 will be represented as measurement name -# ## - the Timestream table from the example will look like this: -# ## Assuming: -# ## - single_table_name = "my_readings" -# ## - single_table_dimension_name_for_telegraf_measurement_name = "namespace" -# ## TABLE "my_readings": -# ## time | location | season | namespace | measure_name | measure_value::bigint -# ## 2016-06-13 17:43:50 | us-midwest | summer | weather | temperature | 82 -# ## 2016-06-13 17:43:50 | us-midwest | summer | weather | humidity | 71 -# ## 2016-06-13 17:43:50 | us-west | NULL | airquality | no2 | 5 -# ## 2016-06-13 17:43:50 | us-west | NULL | airquality | pm25 | 16 -# ## In most cases, using multi-table mapping mode is recommended. -# ## However, you can consider using single-table in situations when you have thousands of measurement names. -# mapping_mode = "multi-table" -# -# ## Only valid and required for mapping_mode = "single-table" -# ## Specifies the Timestream table where the metrics will be uploaded. -# # single_table_name = "yourTableNameHere" -# -# ## Only valid and required for mapping_mode = "single-table" -# ## Describes what will be the Timestream dimension name for the Telegraf -# ## measurement name. -# # single_table_dimension_name_for_telegraf_measurement_name = "namespace" -# -# ## Specifies if the plugin should create the table, if the table do not exist. -# ## The plugin writes the data without prior checking if the table exists. -# ## When the table does not exist, the error returned from Timestream will cause -# ## the plugin to create the table, if this parameter is set to true. -# create_table_if_not_exists = true -# -# ## Only valid and required if create_table_if_not_exists = true -# ## Specifies the Timestream table magnetic store retention period in days. -# ## Check Timestream documentation for more details. -# create_table_magnetic_store_retention_period_in_days = 365 -# -# ## Only valid and required if create_table_if_not_exists = true -# ## Specifies the Timestream table memory store retention period in hours. -# ## Check Timestream documentation for more details. -# create_table_memory_store_retention_period_in_hours = 24 -# -# ## 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 - - -# # Configuration for Wavefront server to send metrics to -# [[outputs.wavefront]] -# ## Url for Wavefront Direct Ingestion. For Wavefront Proxy Ingestion, see -# ## the 'host' and 'port' optioins below. -# url = "https://metrics.wavefront.com" -# -# ## Authentication Token for Wavefront. Only required if using Direct Ingestion -# #token = "DUMMY_TOKEN" -# -# ## DNS name of the wavefront proxy server. Do not use if url is specified -# #host = "wavefront.example.com" -# -# ## Port that the Wavefront proxy server listens on. Do not use if url is specified -# #port = 2878 -# -# ## prefix for metrics keys -# #prefix = "my.specific.prefix." -# -# ## whether to use "value" for name of simple fields. default is false -# #simple_fields = false -# -# ## character to use between metric and field name. default is . (dot) -# #metric_separator = "." -# -# ## Convert metric name paths to use metricSeparator character -# ## When true will convert all _ (underscore) characters in final metric name. default is true -# #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. default is false -# #use_regex = false -# -# ## point tags to use as the source name for Wavefront (if none found, host will be used) -# #source_override = ["hostname", "address", "agent_host", "node_host"] -# -# ## whether to convert boolean values to numeric values, with false -> 0.0 and true -> 1.0. default is true -# #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 the internal buffering in -# ## Telegraf. -# #immediate_flush = true - - -# # Generic WebSocket output writer. -# [[outputs.websocket]] -# ## URL is the address to send metrics to. Make sure ws or wss scheme is used. -# url = "ws://127.0.0.1:8080/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" -# -# ## 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" -# -# ## 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" - - -############################################################################### -# 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 = [] -# -# ## 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 - - -# # Clone metrics and apply modifications. -# [[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 = [] -# -# ## 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 = [] - - -# # 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" - - -# # Defaults sets default value(s) for specified fields that are not set on incoming metrics. -# [[processors.defaults]] -# ## Ensures a set of fields always exists on your metric(s) with their -# ## respective default value. -# ## For any given field pair (key = default), if it's not set, a field -# ## 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 - - -# # Map enum values according to given table. -# [[processors.enum]] -# [[processors.enum.mapping]] -# ## Name of the field to map. Globs accepted. -# field = "status" -# -# ## Name of the tag to map. Globs accepted. -# # tag = "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, the unmodified value for the field will be used if no -# ## match is found. -# # 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]] -# ## Program to run as daemon -# ## eg: command = ["/path/to/your_program", "arg1", "arg2"] -# command = ["cat"] -# -# ## Delay before the process is restarted after an unexpected termination -# restart_delay = "10s" - - -# # 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" - - -# # 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 -# # 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" - - -# # 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/tag(s) and add the result in a new metric -# [[processors.parser]] -# ## The name of the fields whose value will be parsed. -# parse_fields = [] -# -# ## If true, incoming metrics are not emitted. -# drop_original = false -# -# ## If set to override, emitted metrics will be merged by overriding the -# ## original metric using the newly parsed metrics. -# merge = "override" -# -# ## 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]] -# [[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]] - - -# # Transforms tag and field values as well as measurement, tag and field names with regex pattern -# [[processors.regex]] -# ## Tag and field conversions defined in a separate sub-tables -# # [[processors.regex.tags]] -# # ## Tag to change -# # key = "resp_code" -# # ## Regular expression to match on a tag value -# # pattern = "^(\\d)\\d\\d$" -# # ## Matches of the pattern will be replaced with this string. Use ${1} -# # ## notation to use the text of the first submatch. -# # replacement = "${1}xx" -# -# # [[processors.regex.fields]] -# # ## Field to change -# # key = "request" -# # ## All the power of the Go regular expressions available here -# # ## For example, named subgroups -# # pattern = "^/api(?P/[\\w/]+)\\S*" -# # replacement = "${method}" -# # ## If result_key is present, a new field will be created -# # ## instead of changing existing field -# # result_key = "method" -# -# ## Multiple conversions may be applied for one field sequentially -# ## Let's extract one more value -# # [[processors.regex.fields]] -# # key = "request" -# # pattern = ".*category=(\\w+).*" -# # replacement = "${1}" -# # result_key = "search_category" -# -# ## Rename metric fields -# # [[processors.regex.field_rename]] -# # ## Regular expression to match on a field name -# # pattern = "^search_(\\w+)d$" -# # ## Matches of the pattern will be replaced with this string. Use ${1} -# # ## notation to use the text of the first submatch. -# # 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$" -# # ## Matches of the pattern will be replaced with this string. Use ${1} -# # ## notation to use the text of the first submatch. -# # 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$" -# # ## Matches of the pattern will be replaced with this string. Use ${1} -# # ## notation to use the text of the first submatch. -# # replacement = "${1}" - - -# # Rename measurements, tags, and fields that pass through this filter. -# [[processors.rename]] - - -# # 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 repsond. -# ## 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. - - -# # 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 - - -# # 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 tag value to uppercase -# # [[processors.strings.uppercase]] -# # tag = "method" -# -# ## Convert a field value to lowercase and store in a new field -# # [[processors.strings.lowercase]] -# # field = "uri_stem" -# # dest = "uri_stem_normalised" -# -# ## 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 = 10 -# -# ## List of tags to preferentially preserve -# keep = ["foo", "bar", "baz"] - - -# # Uses a Go template to create a new tag -# [[processors.template]] -# ## Tag to set with the output of the template. -# tag = "topic" -# -# ## Go template used to create the tag value. In order to ease TOML -# ## escaping requirements, you may wish to use single quotes around the -# ## template string. -# template = '{{ .Tag "hostname" }}.{{ .Tag "level" }}' - - -# # Print all metrics that pass through this filter. -# [[processors.topk]] -# ## How many seconds between aggregations -# # period = 10 -# -# ## How many top metrics to return -# # 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 = ['*'] -# -# ## Over which fields are the top k are calculated -# # fields = ["value"] -# -# ## What aggregation 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]] -# ## 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", "stdev", "s2", "sum"] - - -# # Calculates a derivative for every field. -# [[aggregators.derivative]] -# ## 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 -# ## -# ## This aggregator will estimate a derivative for each field, which is -# ## contained in both the first and last metric of the aggregation interval. -# ## Without further configuration the derivative will be calculated with -# ## respect to the time difference between these two measurements in seconds. -# ## The formula applied is for every field: -# ## -# ## value_last - value_first -# ## derivative = -------------------------- -# ## time_difference_in_seconds -# ## -# ## The resulting derivative will be named *fieldname_rate*. The suffix -# ## "_rate" can be configured by the *suffix* parameter. When using a -# ## derivation variable you can include its name for more clarity. -# # suffix = "_rate" -# ## -# ## As an abstraction the derivative can be calculated not only by the time -# ## difference but by the difference of a field, which is contained in the -# ## measurement. This field is assumed to be monotonously increasing. This -# ## feature is used by specifying a *variable*. -# ## Make sure the specified variable is not filtered and exists in the metrics -# ## passed to this aggregator! -# # variable = "" -# ## -# ## 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*. -# ## -# ## Note, that the calculation is based on the actual timestamp of the -# ## measurements. When there is only one measurement during that period, the -# ## measurement will be rolled over to the next period. The maximum number of -# ## such roll-overs can be configured with a default of 10. -# # 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 -# -# ## The time that a series is not updated until considering it final. -# series_timeout = "5m" - - -# # Create aggregate histograms. -# [[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]] -# ## 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 = [] - - -############################################################################### -# 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 - report_active = 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"] - - -# Read metrics about disk IO by device -[[inputs.diskio]] - ## By default, telegraf will gather stats for all devices including - ## disk partitions. - ## Setting devices will restrict the stats to the specified devices. - # devices = ["sda", "sdb", "vd*"] - ## Uncomment the following line if you need disk serial numbers. - # skip_serial_number = false - # - ## On systems which support it, device metadata can be added in the form of - ## tags. - ## Currently only Linux is supported via udev properties. You can view - ## available properties for a device by running: - ## 'udevadm info -q property -n /dev/sda' - ## 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"] - - -# Get kernel statistics from /proc/stat -[[inputs.kernel]] - # no configuration - - -# Read metrics about memory usage -[[inputs.mem]] - # no configuration - - -# Get the number of processes and group them by status -[[inputs.processes]] - # no configuration - - -# Read metrics about swap memory usage -[[inputs.swap]] - # no configuration - - -# Read metrics about system load & uptime -[[inputs.system]] - ## Uncomment to remove deprecated metrics. - # fielddrop = ["uptime_format"] - - -# # 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 - - -# # 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 -# # enable_tls = false -# # tls_ca = "/etc/telegraf/ca.pem" -# # tls_cert = "/etc/telegraf/cert.pem" -# # tls_key = "/etc/telegraf/key.pem" -# # tls_name = "tlsname" -# ## If false, skip chain & host verification -# # insecure_skip_verify = true -# -# # 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 - - -# # 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" - - -# # 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 Storage Queue metrics -# [[inputs.azure_storage_queue]] -# ## Required Azure Storage Account name -# account_name = "mystorageaccount" -# -# ## Required Azure Storage Account access key -# account_key = "storageaccountaccesskey" -# -# ## Set to false to disable peeking age of oldest message (executes faster) -# # peek_oldest_message_age = true - - -# # Read metrics of bcache from stats_total and dirty_data -# [[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 -# -# ## 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 -# [[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"] - - -# # Get standard chrony metrics, requires chronyc executable. -# [[inputs.chrony]] -# ## If true, chronyc tries to perform a DNS lookup for the time server. -# # dns_lookup = false - - -# # 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 = "" -# -# ## 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 (telegraf uses the system wide proxy settings if it's is not set) -# # 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 3 Hours. -# ## 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 (required) -# namespaces = ["AWS/ELB"] -# # A single metric statistic namespace that will be appended to namespaces on startup -# # namespace = "AWS/ELB" -# -# ## 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" -# -# ## 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. -# [[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. -# -# ## 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"] -# -# ## Directories to search within for the conntrack files above. -# ## Missing directories will be ignored. -# dirs = ["/proc/sys/net/ipv4/netfilter","/proc/sys/net/netfilter"] - - -# # 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. -# ## -# ## example: metric_version = 1; deprecated in 1.15 -# ## 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 splitted 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. -# ## Only one of the options can be set. Leave empty to not use any token. -# # 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 - - -# # 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-ee-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 -# [[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 in seconds. -# # timeout = 2 - - -# # 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) -# 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. 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. -# ## 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 = [] -# -# ## Timeout for docker list, info, and stats commands -# timeout = "5s" -# -# ## 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, ...) -# ## Please note that this setting has no effect if 'perdevice' is set to 'true' -# # perdevice_include = ["cpu"] -# -# ## Specifies for which classes a total metric should be issued. Total is an aggregated of the 'perdevice' 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. -# ## Please note that this setting has no effect if 'total' is set to 'false' -# # total_include = ["cpu", "blkio", "network"] -# -# ## Which environment variables should we use as a tag -# ##tag_env = ["JAVA_HOME", "HEAP_SIZE"] -# -# ## 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 = [] -# -# ## 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 statistics from one or many dovecot servers -# [[inputs.dovecot]] -# ## specify dovecot servers via an address:port list -# ## e.g. -# ## localhost:24242 -# ## -# ## 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 = [""] - - -# # Reads metrics from DPDK applications using v2 telemetry interface. -# [[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). -# ## 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 http://doc.dpdk.org/guides/prog_guide/telemetry_lib.html#registering-commands -# ## For e.g. L3 Forwarding with Power Management Sample Application this could be: -# ## additional_commands = ["/l3fwd-power/stats"] -# # additional_commands = [] -# -# ## Allows turning off collecting data for individual "ethdev" commands. -# ## Remove "/ethdev/link_status" from list to start getting 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 metrics about docker containers from Fargate/ECS v2, v3 meta endpoints. -# [[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" - - -# # 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"] -# -# ## Timeout for HTTP requests to the elastic search server(s) -# http_timeout = "5s" -# -# ## 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 also obtain cluster health stats -# cluster_health = false -# -# ## Adjust cluster_health_level when you want to also obtain detailed health stats -# ## The options are -# ## - indices (default) -# ## - cluster -# # cluster_health_level = "indices" -# -# ## Set cluster_stats to true when you want to also 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 -# -# ## 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" -# 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 -# -# ## 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 -# -# [[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" - - -# # Returns ethtool statistics for given interfaces -# [[inputs.ethtool]] -# ## List of interfaces to pull metrics for -# # interface_include = ["eth0"] -# -# ## List of interfaces to ignore when pulling metrics. -# # interface_exclude = ["eth1"] -# -# ## 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 = [ -# "/tmp/test.sh", -# "/usr/bin/mycollector --foo=bar", -# "/tmp/collect_*.sh" -# ] -# -# ## Timeout for each command to complete. -# timeout = "5s" -# -# ## measurement name suffix (for separating different commands) -# name_suffix = "_mycollector" -# -# ## 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 metrics from fail2ban. -# [[inputs.fail2ban]] -# ## Use sudo to run fail2ban-client -# use_sudo = false - - -# # 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" - - -# # 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"] -# -# -# ## 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 = "" -# # -# -# ## 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 = "" -# -# ## 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" - - -# # 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/archives"] -# -# ## Only count files that match the name pattern. Defaults to "*". -# name = "*.deb" -# -# ## Count files in subdirectories. Defaults to true. -# recursive = false -# -# ## 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". 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 -# ## -# ## See https://github.com/gobwas/glob for more examples -# ## -# files = ["/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 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 = [] - - -# # 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 socket or csv stats page -# [[inputs.haproxy]] -# ## An array of address to gather stats about. Specify an ip on hostname -# ## with optional port. ie localhost, 10.10.3.33:1936, etc. -# ## Make sure you specify the complete path to the stats endpoint -# ## including the protocol, ie http://10.10.3.33:1936/haproxy?stats -# -# ## If no servers are specified, then default to 127.0.0.1:1936/haproxy?stats -# servers = ["http://myhaproxy.com:1936/haproxy?stats"] -# -# ## Credentials for basic HTTP authentication -# # username = "admin" -# # password = "admin" -# -# ## You can also use local socket with standard wildcard globbing. -# ## Server address not starting with 'http' will be treated as a possible -# ## socket, so both examples below are valid. -# # servers = ["socket:/run/haproxy/admin.sock", "/run/haproxy/*.sock"] -# -# ## 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", "*"] - - -# # 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 method -# # method = "GET" -# -# ## Optional HTTP headers -# # headers = {"X-Special-Header" = "Special-Value"} -# -# ## 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" -# -# ## 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" -# -# ## HTTP Proxy support -# # http_proxy_url = "" -# -# ## OAuth2 Client Credentials Grant -# # client_id = "clientid" -# # client_secret = "secret" -# # token_url = "https://indentityprovider/oauth2/v1/token" -# # scopes = ["urn:opc:idm:__myscopes__"] -# -# ## 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 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 = "5m" -# -# ## Amount of time allowed to complete the HTTP request -# # timeout = "5s" -# -# ## 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" - - -# # 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 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 -# -# ## 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" - - -# # Read flattened metrics from one or more JSON HTTP endpoints -# [[inputs.httpjson]] -# ## DEPRECATED: The 'httpjson' plugin is deprecated in version 1.6.0, use 'inputs.http' instead. -# ## NOTE This plugin only reads numerical measurements, strings and booleans -# ## will be ignored. -# -# ## URL of each server in the service's cluster -# servers = [ -# "http://localhost:9999/stats/", -# "http://localhost:9998/stats/", -# ] -# ## Set response_timeout (default 5 seconds) -# response_timeout = "5s" -# -# ## HTTP method to use: GET or POST (case-sensitive) -# method = "GET" -# -# ## List of tag names to extract from top-level of JSON server response -# # tag_keys = [ -# # "my_tag_1", -# # "my_tag_2" -# # ] -# -# ## 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 parameters (all values must be strings). For "GET" requests, data -# ## will be included in the query. For "POST" requests, data will be included -# ## in the request body as "x-www-form-urlencoded". -# # [inputs.httpjson.parameters] -# # event_type = "cpu_spike" -# # threshold = "0.75" -# -# ## HTTP Headers (all values must be strings) -# # [inputs.httpjson.headers] -# # X-Auth-Token = "my-xauth-token" -# # apiVersion = "v1" - - -# # Gathers huge pages measurements. -# [[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" -# -# ## Required Icinga2 object type ("services" or "hosts") -# # object_type = "services" -# -# ## 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 -# [[inputs.infiniband]] -# # no configuration - - -# # 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 PowerStat plugin enables monitoring of platform metrics (power, TDP) and Core metrics like temperature, power and utilization. -# [[inputs.intel_powerstat]] -# ## All global metrics are always collected by Intel PowerStat plugin. -# ## User can choose which per-CPU metrics are monitored by the plugin in cpu_metrics array. -# ## Empty array means no per-CPU specific metrics will be collected by the plugin - in this case only platform level -# ## telemetry will be exposed by Intel PowerStat plugin. -# ## Supported options: -# ## "cpu_frequency", "cpu_busy_frequency", "cpu_temperature", "cpu_c1_state_residency", "cpu_c6_state_residency", "cpu_busy_cycles" -# # cpu_metrics = [] - - -# # Collect statistics about itself -# [[inputs.internal]] -# ## If true, collect telegraf memory stats. -# # collect_memstats = true - - -# # Monitors internet speed using speedtest.net service -# [[inputs.internet_speed]] -# ## Sets if runs file download test -# # enable_file_download = false -# -# ## Caches the closest server location -# # cache = false - - -# # 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, i.e. -# # [inputs.interrupts.tagdrop] -# # irq = [ "NET_RX", "TASKLET" ] - - -# # Read metrics from the bare metal servers via IPMI -# [[inputs.ipmi_sensor]] -# ## optionally specify the path to the ipmitool executable -# # path = "/usr/bin/ipmitool" -# ## -# ## 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 -# ## -# ## optionally force session privilege level. Can be CALLBACK, USER, OPERATOR, ADMINISTRATOR -# # privilege = "ADMINISTRATOR" -# ## -# ## optionally specify one or more servers via a url matching -# ## [username[:password]@][protocol[(address)]] -# ## e.g. -# ## root:passwd@lan(127.0.0.1) -# ## -# ## if no servers are specified, local machine sensor stats will be queried -# ## -# # servers = ["USERID:PASSW0RD@lan(192.168.1.1)"] -# -# ## Recommended: use metric 'interval' that is a multiple of 'timeout' to avoid -# ## gaps or overlap in pulled data -# interval = "30s" -# -# ## Timeout for the ipmitool command to complete -# timeout = "20s" -# -# ## Schema Version: (Optional, defaults to version 1) -# metric_version = 2 -# -# ## Optionally provide the hex key for the IMPI connection. -# # hex_key = "" -# -# ## If ipmitool should use a cache -# ## for me ipmitool runs about 2 to 10 times faster with cache enabled on HP G10 servers (when using ubuntu20.04) -# ## the cache file may not work well for you if some sensors come up late -# # 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") -# use_sudo = false -# ## The default timeout of 1s for ipset execution can be overridden here: -# # timeout = "1s" - - -# # Gather packets and bytes throughput from iptables -# [[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 -# [[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 - - -# # Read JMX metrics through Jolokia -# [[inputs.jolokia]] -# ## DEPRECATED: The 'jolokia' plugin is deprecated in version 1.5.0, use 'inputs.jolokia2' instead. -# # DEPRECATED: the jolokia plugin has been deprecated in favor of the -# # jolokia2 plugin -# # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2 -# -# ## This is the context root used to compose the jolokia url -# ## NOTE that Jolokia requires a trailing slash at the end of the context root -# ## NOTE that your jolokia security policy must allow for POST requests. -# context = "/jolokia/" -# -# ## This specifies the mode used -# # mode = "proxy" -# # -# ## When in proxy mode this section is used to specify further -# ## proxy address configurations. -# ## Remember to change host address to fit your environment. -# # [inputs.jolokia.proxy] -# # host = "127.0.0.1" -# # port = "8080" -# -# ## Optional http timeouts -# ## -# ## response_header_timeout, if non-zero, specifies the amount of time to wait -# ## for a server's response headers after fully writing the request. -# # response_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" -# -# ## Attribute delimiter -# ## -# ## When multiple attributes are returned for a single -# ## [inputs.jolokia.metrics], the field name is a concatenation of the metric -# ## name, and the attribute name, separated by the given delimiter. -# # delimiter = "_" -# -# ## List of servers exposing jolokia read service -# [[inputs.jolokia.servers]] -# name = "as-server-01" -# host = "127.0.0.1" -# port = "8080" -# # username = "myuser" -# # password = "mypassword" -# -# ## List of metrics collected on above servers -# ## Each metric consists in a name, a jmx path and either -# ## a pass or drop slice attribute. -# ## This collect all heap memory usage metrics. -# [[inputs.jolokia.metrics]] -# name = "heap_memory_usage" -# mbean = "java.lang:type=Memory" -# attribute = "HeapMemoryUsage" -# -# ## This collect thread counts metrics. -# [[inputs.jolokia.metrics]] -# name = "thread_count" -# mbean = "java.lang:type=Threading" -# attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount" -# -# ## This collect number of class loaded/unloaded counts metrics. -# [[inputs.jolokia.metrics]] -# name = "class_count" -# mbean = "java.lang:type=ClassLoading" -# attribute = "LoadedClassCount,UnloadedClassCount,TotalLoadedClassCount" - - -# # 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 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 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 -# [[inputs.kernel_vmstat]] -# # no configuration - - -# # 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 - - -# # Read metrics from the Kubernetes api -# [[inputs.kube_inventory]] -# ## URL for the Kubernetes API -# url = "https://127.0.0.1" -# -# ## Namespace to use. Set to "" to use all namespaces. -# # namespace = "default" -# -# ## Use bearer token for authorization. ('bearer_token' takes priority) -# ## If both of these are empty, we'll use the default serviceaccount: -# ## at: /run/secrets/kubernetes.io/serviceaccount/token -# # bearer_token = "/path/to/bearer/token" -# ## OR -# # bearer_token_string = "abc_123" -# -# ## 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 -# # tls_ca = "/path/to/cafile" -# # tls_cert = "/path/to/certfile" -# # tls_key = "/path/to/keyfile" -# # tls_server_name = "kubernetes.example.com" -# ## Use TLS but skip chain & host verification -# # insecure_skip_verify = false - - -# # Read metrics from the kubernetes kubelet api -# [[inputs.kubernetes]] -# ## URL for the kubelet -# 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: /run/secrets/kubernetes.io/serviceaccount/token -# # bearer_token = "/path/to/bearer/token" -# ## OR -# # bearer_token_string = "abc_123" -# -# ## 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 - - -# # Read metrics from a LeoFS Server via SNMP -# [[inputs.leofs]] -# ## An array of URLs of the form: -# ## host [ ":" port] -# servers = ["127.0.0.1:4020"] - - -# # Provides Linux sysctl fs metrics -# [[inputs.linux_sysctl_fs]] -# # no configuration - - -# # 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 -# -# ## Optional HTTP headers. -# # [inputs.logstash.headers] -# # "X-Special-Header" = "Special-Value" - - -# # Read metrics from local Lustre service on OST, MDS -# [[inputs.lustre2]] -# ## An array of /proc globs to search for Lustre stats -# ## If not specified, the default will work on Lustre 2.5.x -# ## -# # ost_procfiles = [ -# # "/proc/fs/lustre/obdfilter/*/stats", -# # "/proc/fs/lustre/osd-ldiskfs/*/stats", -# # "/proc/fs/lustre/obdfilter/*/job_stats", -# # ] -# # mds_procfiles = [ -# # "/proc/fs/lustre/mdt/*/md_stats", -# # "/proc/fs/lustre/mdt/*/job_stats", -# # ] - - -# # Read metrics about LVM physical volumes, volume groups, logical volumes. -# [[inputs.lvm]] -# ## Use sudo to run LVM commands -# use_sudo = false - - -# # 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. -# 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 md array statistics from /proc/mdstat -# [[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"] -# # unix_sockets = ["/var/run/memcached.sock"] -# -# ## Optional TLS Config -# # enable_tls = true -# # 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.random]] -# ## name = "rand" -# ## min = 1.0 -# ## max = 6.0 -# ## [[inputs.mock.sine_wave]] -# ## name = "wave" -# ## amplitude = 1.0 -# ## period = 0.5 -# ## [[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) -# # controller = "file:///dev/ttyUSB0" -# # baud_rate = 9600 -# # data_bits = 8 -# # parity = "N" -# # stop_bits = 1 -# -# ## Trace the connection to the modbus device as debug messages -# ## Note: You have to enable telegraf's debug mode to see those messages! -# # debug_connection = false -# -# ## For Modbus over TCP you can choose between "TCP", "RTUoverTCP" and "ASCIIoverTCP" -# ## default behaviour is "TCP" if the controller is TCP -# ## For Serial you can choose between "RTU" and "ASCII" -# # transmission_mode = "RTU" -# -# ## 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 -# configuration_type = "register" -# -# ## Per register definition -# ## -# -# ## Digital Variables, Discrete Inputs and Coils -# ## measurement - the (optional) measurement name, defaults to "modbus" -# ## name - the variable name -# ## 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 - INT16, UINT16, INT32, UINT32, INT64, UINT64, -# ## FLOAT32-IEEE, FLOAT64-IEEE (the IEEE 754 binary representation) -# ## FLOAT32, FIXED, UFIXED (fixed-point representation on input) -# ## 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]}, -# ] -# 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]}, -# ] -# -# -# ## 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 = 0 -# -# ## Byte order of the data. -# ## |---ABCD or MSW-BE -- Big Endian (Motorola) -# ## |---DCBA or LSW-LE -- Little Endian (Intel) -# ## |---BADC or MSW-LE -- Big Endian with byte swap -# ## |---CDAB or LSW-BE -- Little Endian with byte swap -# # byte_order = "ABCD" -# -# ## Type of the register for the request -# ## Can be "coil", "discrete", "holding" or "input" -# # register = "holding" -# -# ## Name of the measurement. -# ## Can be overriden by the individual field definitions. Defaults to "modbus" -# # measurement = "modbus" -# -# ## 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 INT16, UINT16, INT32, UINT32, INT64, UINT64 and -# ## FLOAT32, FLOAT64 (IEEE 754 binary representation) -# ## scale *1,2 - (optional) factor to scale the variable with -# ## output *1,2 - (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 (i.e. INT* -> INT64, etc). -# ## 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: Those fields are ignored if field is omitted ("omit"=true) -# ## -# ## *2: Thise fields are ignored for both "coil" and "discrete"-input type of registers. For those register types -# ## the fields are output as zero or one in UINT64 format by default. -# -# ## 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"}, -# # ] -# -# ## Per-request tags -# ## These tags take precedence over predefined tags. -# # [[inputs.modbus.request.tags]] -# # name = "value" -# -# ## Holding / input example -# ## All of those examples will result in FLOAT64 field outputs -# # 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 }, -# # ] -# -# ## Holding / input example with type conversions -# # 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 -# # ] -# -# ## Per-request tags -# ## These tags take precedence over predefined tags. -# # [[inputs.modbus.request.tags]] -# # name = "value" -# -# -# -# ## Enable workarounds required by some devices to work correctly -# # [inputs.modbus.workarounds] -# ## 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 - - -# # 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, -# 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 -# # 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 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, Telegraf 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 above list -# # 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 SHOW SLAVE STATUS command output -# # gather_slave_status = false -# -# ## gather metrics from all channels from SHOW SLAVE STATUS command output -# # gather_all_slave_channels = false -# -# ## use MariaDB dialect for all channels SHOW SLAVE STATUS -# # mariadb_dialect = false -# -# ## gather metrics from SHOW BINARY LOGS command output -# # gather_binary_logs = false -# -# ## gather metrics from PERFORMANCE_SCHEMA.GLOBAL_VARIABLES -# # 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 -# -# ## 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 -# -# ## 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 = [] -# -# ## Some queries we may want to run less often (such as SHOW GLOBAL VARIABLES) -# ## example: interval_slow = "30m" -# # interval_slow = "" -# -# ## Optional TLS Config (will be 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 -# [[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" - - -# # Read metrics about network interface usage -# [[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. -# ## -# # interfaces = ["eth0"] -# ## -# ## On linux systems telegraf also collects protocol stats. -# ## Setting ignore_protocol_stats to true will skip reporting of protocol metrics. -# ## -# # ignore_protocol_stats = false -# ## - - -# # 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 -# # fielddrop = ["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 explictly 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. Symantics 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 mulitple [[input.nfsclient]] stanzas, -# ## with their own lists. See "include_mounts" above, and be careful of -# ## duplicate metrics. -# # include_operations = [] -# # exclude_operations = [] - - -# # 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"] -# -# ## Optional TLS Config -# tls_ca = "/etc/telegraf/ca.pem" -# tls_cert = "/etc/telegraf/cert.cer" -# tls_key = "/etc/telegraf/key.key" -# ## Use TLS but skip chain & host verification -# insecure_skip_verify = false -# -# # HTTP response timeout (default: 5s) -# response_timeout = "5s" - - -# # Read Nginx Plus' full status information (ngx_http_status_module) -# [[inputs.nginx_plus]] -# ## An array of ngx_http_status_module or status URI to gather stats. -# urls = ["http://localhost/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 documentation -# [[inputs.nginx_plus_api]] -# ## An array of API URI to gather stats. -# urls = ["http://localhost/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 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" -# -# ## 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 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 authoritative DNS name server -# [[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]] -# ## If false, set the -n ntpq flag. Can reduce metric gather time. -# dns_lookup = true - - -# # 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]] -# ## 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 estabilished connection. -# # request_timeout = "5s" -# # -# ## 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" -# # -# ## 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" -# # -# ## Node ID configuration -# ## name - field name to use in the output -# ## namespace - OPC UA namespace of the node (integer value 0 thru 3) -# ## identifier_type - OPC UA ID type (s=string, i=numeric, g=guid, b=opaque) -# ## identifier - OPC UA ID (tag as shown in opcua browser) -# ## Example: -# ## {name="ProductUri", namespace="0", identifier_type="i", identifier="2262"} -# # nodes = [ -# # {name="", namespace="", identifier_type="", identifier=""}, -# # {name="", namespace="", identifier_type="", identifier=""}, -# #] -# # -# ## Node Group -# ## Sets defaults for OPC UA namespace and ID type so they aren't required in -# ## every node. A group can also have a metric name that overrides the main -# ## plugin metric name. -# ## -# ## 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 identifier type. If a node in the group doesn't set its -# ## namespace, this is used. -# # identifier_type = -# # -# ## Node ID Configuration. Array of nodes with the same settings as above. -# # nodes = [ -# # {name="", namespace="", identifier_type="", identifier=""}, -# # {name="", 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"] - - -# # 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. Recommended. -# # This 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 = "5ms" - - -# # 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 1000ms can be overridden with (in milliseconds): -# timeout = 1000 - - -# # 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", "flavors", "hypervisors", "networks", "nova_services", -# ## "ports", "projects", "servers", "services", "stacks", "storage_pools", "subnets", "volumes" -# # enabled_services = ["services", "projects", "hypervisors", "flavors", "networks", "volumes"] -# -# ## Collect Server Diagnostics -# # server_diagnotics = false -# -# ## 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 recieved from Openstack. -# ## If false format is unix nanoseconds. -# # human_readable_timestamps = false -# -# ## Measure Openstack call duration -# # measure_openstack_requests = false - - -# # 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". -# # units = "metric" -# -# ## Query interval; OpenWeatherMap updates their weather data every 10 -# ## minutes. -# interval = "10m" - - -# # 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" -# ## -# ## - 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"] -# -# ## 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. -# # timeout = 1.0 -# -# ## If set, the total ping deadline, in seconds. Operates like the -w option -# ## of the ping command. -# # 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 IPv6 addresses when resolving a hostname. -# # 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 -# [[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. -# 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" - - -# # 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" -# -# ## 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 = "" -# -# ## When true add the full cmdline as a tag. -# # cmdline_tag = false -# -# ## Mode to use when calculating CPU usage. Can be one of 'solaris' or 'irix'. -# # mode = "irix" -# -# ## Add the PID as a tag instead of as a field. When collecting multiple -# ## processes with otherwise matching tags this setting should be enabled to -# ## ensure each process has a unique identity. -# ## -# ## Enabling this option may result in a large number of series, especially -# ## when processes have a short lifetime. -# # pid_tag = false -# -# ## 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" - - -# # 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 -# # node_name = "" -# -# ## 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 include and exclude when gathering the rabbitmq_federation measurement. -# ## If neither are specified, metrics for all federation upstreams are gathered. -# ## Federation link metrics will only be gathered for queues and exchanges -# ## whose non-federation metrics will be collected (e.g a queue excluded -# ## by the 'queue_name_exclude' option will also be excluded from federation). -# ## Globs accepted. -# # federation_upstream_include = ["dataCentre-*"] -# # federation_upstream_exclude = [] - - -# # 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]] -# ## Server url -# address = "https://127.0.0.1:5000" -# -# ## Username, Password for hardware server -# username = "root" -# password = "password123456" -# -# ## ComputerSystemId -# computer_system_id="2M220100SL" -# -# ## 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 servers -# [[inputs.redis]] -# ## specify servers via a url matching: -# ## [protocol://][:password]@address[:port] -# ## e.g. -# ## tcp://localhost:6379 -# ## tcp://: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 server password -# # password = "s#cr@t%" -# -# ## 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 redis-sentinel servers -# [[inputs.redis_sentinel]] -# ## specify servers via a url matching: -# ## [protocol://][:password]@address[:port] -# ## e.g. -# ## tcp://localhost:26379 -# ## tcp://: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, -# ## 10.0.0.1:10000, etc. -# servers = ["127.0.0.1:28015"] -# ## -# ## If you use actual rethinkdb of > 2.3.0 with username/password authorization, -# ## protocol have to be named "rethinkdb2" - it will use 1_0 H. -# # servers = ["rethinkdb2://username:password@127.0.0.1:28015"] -# ## -# ## If you use older versions of rethinkdb (<2.2) with auth_key, protocol -# ## have to be named "rethinkdb". -# # servers = ["rethinkdb://username:auth_key@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 -# [[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" - - -# # 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 -# -# ## 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" - - -# # 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" -# -# ## SNMP version; can be 1, 2, or 3. -# # version = 2 -# -# ## 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"] -# -# ## Agent host tag; the tag used to reference the source host -# # agent_host_tag = "agent_host" -# -# ## 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", "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" or "". -# # 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. - - -# # DEPRECATED! PLEASE USE inputs.snmp INSTEAD. -# [[inputs.snmp_legacy]] -# ## DEPRECATED: The 'snmp_legacy' plugin is deprecated in version 1.0.0, use 'inputs.snmp' instead. -# ## Use 'oids.txt' file to translate oids to names -# ## To generate 'oids.txt' you need to run: -# ## snmptranslate -m all -Tz -On | sed -e 's/"//g' > /tmp/oids.txt -# ## Or if you have an other MIB folder with custom MIBs -# ## snmptranslate -M /mycustommibfolder -Tz -On -m all | sed -e 's/"//g' > oids.txt -# snmptranslate_file = "/tmp/oids.txt" -# [[inputs.snmp.host]] -# address = "192.168.2.2:161" -# # SNMP community -# community = "public" # default public -# # SNMP version (1, 2 or 3) -# # Version 3 not supported yet -# version = 2 # default 2 -# # SNMP response timeout -# timeout = 2.0 # default 2.0 -# # SNMP request retries -# retries = 2 # default 2 -# # Which get/bulk do you want to collect for this host -# collect = ["mybulk", "sysservices", "sysdescr"] -# # Simple list of OIDs to get, in addition to "collect" -# get_oids = [] -# -# [[inputs.snmp.host]] -# address = "192.168.2.3:161" -# community = "public" -# version = 2 -# timeout = 2.0 -# retries = 2 -# collect = ["mybulk"] -# get_oids = [ -# "ifNumber", -# ".1.3.6.1.2.1.1.3.0", -# ] -# -# [[inputs.snmp.get]] -# name = "ifnumber" -# oid = "ifNumber" -# -# [[inputs.snmp.get]] -# name = "interface_speed" -# oid = "ifSpeed" -# instance = "0" -# -# [[inputs.snmp.get]] -# name = "sysuptime" -# oid = ".1.3.6.1.2.1.1.3.0" -# unit = "second" -# -# [[inputs.snmp.bulk]] -# name = "mybulk" -# max_repetition = 127 -# oid = ".1.3.6.1.2.1.1" -# -# [[inputs.snmp.bulk]] -# name = "ifoutoctets" -# max_repetition = 127 -# oid = "ifOutOctets" -# -# [[inputs.snmp.host]] -# address = "192.168.2.13:161" -# #address = "127.0.0.1:161" -# community = "public" -# version = 2 -# timeout = 2.0 -# retries = 2 -# #collect = ["mybulk", "sysservices", "sysdescr", "systype"] -# collect = ["sysuptime" ] -# [[inputs.snmp.host.table]] -# name = "iftable3" -# include_instances = ["enp5s0", "eth1"] -# -# # SNMP TABLEs -# # table without mapping neither subtables -# [[inputs.snmp.table]] -# name = "iftable1" -# oid = ".1.3.6.1.2.1.31.1.1.1" -# -# # table without mapping but with subtables -# [[inputs.snmp.table]] -# name = "iftable2" -# oid = ".1.3.6.1.2.1.31.1.1.1" -# sub_tables = [".1.3.6.1.2.1.2.2.1.13"] -# -# # table with mapping but without subtables -# [[inputs.snmp.table]] -# name = "iftable3" -# oid = ".1.3.6.1.2.1.31.1.1.1" -# # if empty. get all instances -# mapping_table = ".1.3.6.1.2.1.31.1.1.1.1" -# # if empty, get all subtables -# -# # table with both mapping and subtables -# [[inputs.snmp.table]] -# name = "iftable4" -# oid = ".1.3.6.1.2.1.31.1.1.1" -# # if empty get all instances -# mapping_table = ".1.3.6.1.2.1.31.1.1.1.1" -# # if empty get all subtables -# # sub_tables could be not "real subtables" -# sub_tables=[".1.3.6.1.2.1.2.2.1.13", "bytes_recv", "bytes_send"] - - -# # Gather indicators from established connections, using iproute2's `ss` command. -# [[inputs.socketstat]] -# ## ss can display information about tcp, udp, raw, unix, packet, dccp and sctp sockets -# ## List of protocol types to collect -# # protocols = [ "tcp", "udp" ] -# ## The default timeout of 1s for ss execution can be overridden here: -# # timeout = "1s" - - -# # 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 = ["main"] -# -# ## Optional HTTP Basic Auth Credentials -# # username = "username" -# # password = "pa$$word" - - -# # 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 = [] -# -# ## Many metrics are updated 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 } -# ## resource_labels ::= {OR } -# ## metric_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")' - - -# # Get synproxy counter statistics from procfs -# [[inputs.synproxy]] -# # no configuration - - -# # Sysstat metrics collector -# [[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" - - -# # Gather systemd units state -# [[inputs.systemd_units]] -# ## Set timeout for systemctl execution -# # timeout = "1s" -# # -# ## Filter for a specific unit type, default is "service", other possible -# ## values are "socket", "target", "device", "mount", "automount", "swap", -# ## "timer", "path", "slice" and "scope ": -# # unittype = "service" -# # -# ## Filter for a specific pattern, default is "" (i.e. all), other possible -# ## values are valid pattern for systemctl, e.g. "a*" for all units with -# ## names starting with "a" -# # pattern = "" -# ## pattern = "telegraf* influxdb*" -# ## pattern = "a*" - - -# # 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" -# ## Array of virtual servers -# # virtual_servers = [1] - - -# # Read metrics about temperature -# [[inputs.temp]] -# # no configuration - - -# # 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.cer" -# # tls_key = "/etc/telegraf/key.key" -# ## Use TLS but skip chain & host verification -# # insecure_skip_verify = false - - -# # 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 - - -# # 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 -# [[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 overriden 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. -# 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 contains nonactive VCL's are skipped. -# ## Regexp group "_field" overrides 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" - - -# # 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 - - -# # 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 -# [[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 -# ## Prefix your entry with 'file://' if you intend to use relative paths -# sources = ["tcp://example.org:443", "https://influxdata.com:443", -# "udp://127.0.0.1:4433", "/etc/ssl/certs/ssl-cert-snakeoil.pem", -# "/etc/mycerts/*.mydomain.org.pem", "file:///path/to/*.pem"] -# -# ## Timeout for SSL connection -# # timeout = "5s" -# -# ## Pass a different name into the TLS request (Server Name Indication) -# ## example: server_name = "myhost.example.org" -# # server_name = "" -# -# ## Don't include root or intermediate certificates in output -# # exclude_root_certs = false -# -# ## Optional TLS Config -# # tls_ca = "/etc/telegraf/ca.pem" -# # tls_cert = "/etc/telegraf/cert.pem" -# # tls_key = "/etc/telegraf/key.pem" - - -# # 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 -# [[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 -# ## If not specified, then 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 zdataset stats -# # datasetMetrics = 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" -# -# ## Optional TLS Config -# # enable_tls = true -# # 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 - - -############################################################################### -# 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 the ali cloud region list to be queried for metrics and objects 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: -# ## 21 items: 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 supported not for all projects (if not supported, then -# ## it will be reported on the start - for example for 'acs_cdn' project: -# ## 'E! [inputs.aliyuncms] Discovery tool is not activated: no discovery support for project "acs_cdn"' ) -# ## Currently, discovery supported for the following projects: -# ## - acs_ecs_dashboard -# ## - acs_rds_dashboard -# ## - acs_slb_dashboard -# ## - acs_vpc_eip -# regions = ["cn-hongkong"] -# -# # The minimum period for AliyunCMS 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://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 the Aliyun OpenAPI -# # and will not be collected by Telegraf. -# # -# ## Requested AliyunCMS aggregation Period (required - must be a multiple of 60s) -# period = "5m" -# -# ## Collection Delay (required - 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" -# -# ## Metrics to Pull (Required) -# [[inputs.aliyuncms.metrics]] -# ## Metrics names to be requested, -# ## described here (per project): https://help.aliyun.com/document_detail/28619.html?spm=a2c4g.11186623.6.690.1938ad41wg8QSq -# names = ["InstanceActiveConnection", "InstanceNewConnection"] -# -# ## Dimension filters for Metric (these are 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"}]' -# -# ## 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: 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]" -# # ] -# ## The following tags added by default: regionId (if discovery enabled), userId, instanceId. -# -# ## 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 - - -# # 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 -# -# ## 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 -# -# ## Maximum messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # max_undelivered_messages = 1000 -# -# ## 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" to or -# ## "identity" to apply no encoding. -# # content_encoding = "identity" -# -# ## 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 Cassandra metrics through Jolokia -# [[inputs.cassandra]] -# ## DEPRECATED: The 'cassandra' plugin is deprecated in version 1.7.0, use 'inputs.jolokia2' with the 'cassandra.conf' example configuration instead. -# ## DEPRECATED: The cassandra plugin has been deprecated. Please use the -# ## jolokia2 plugin instead. -# ## -# ## see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2 -# -# context = "/jolokia/read" -# ## List of cassandra servers exposing jolokia read service -# servers = ["myuser:mypassword@10.10.10.1:8778","10.10.10.2:8778",":8778"] -# ## List of metrics collected on above servers -# ## Each metric consists of a jmx path. -# ## This will collect all heap memory usage metrics from the jvm and -# ## ReadLatency metrics for all keyspaces and tables. -# ## "type=Table" in the query works with Cassandra3.0. Older versions might -# ## need to use "type=ColumnFamily" -# metrics = [ -# "/java.lang:type=Memory/HeapMemoryUsage", -# "/org.apache.cassandra.metrics:type=Table,keyspace=*,scope=*,name=ReadLatency" -# ] - - -# # 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" -# -# ## 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"] -# -# ## 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] -# ModTs = "ignore" -# CreateTs = "ignore" - - -# # Read metrics from one or many ClickHouse servers -# [[inputs.clickhouse]] -# ## Username for authorization on ClickHouse server -# ## example: username = "default" -# username = "default" -# -# ## Password for authorization on ClickHouse server -# ## example: password = "super_secret" -# -# ## HTTP(s) timeout while getting metrics values -# ## The timeout includes connection time, any redirects, and reading the response body. -# ## example: timeout = 1s -# # timeout = 5s -# -# ## List of servers for metrics scraping -# ## metrics scrape via HTTP(s) clickhouse interface -# ## https://clickhouse.tech/docs/en/interfaces/http/ -# ## example: servers = ["http://127.0.0.1:8123","https://custom-server.mdb.yandexcloud.net"] -# servers = ["http://127.0.0.1:8123"] -# -# ## 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 -# ## example: auto_discovery = false -# # 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 -# -# ## Optional. Maximum messages to read from PubSub that have not been written -# ## to an output. Defaults to 1000. -# ## For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message contains 10 metrics and the output -# ## metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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#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 -# # base64_data = false - - -# # 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 -# -# ## Optional. Maximum messages to read from PubSub that have not been written -# ## to an output. Defaults to 1000. -# ## For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message contains 10 metrics and the output -# ## metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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" - - -# # Ingests files in a directory and then moves them to a target directory. -# [[inputs.directory_monitor]] -# ## The directory to monitor and read files from. -# directory = "" -# # -# ## The directory to move finished files to. -# finished_directory = "" -# # -# ## 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 = "" -# # -# ## 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 -# ## NOTE: We currently only support parsing newline-delimited JSON. See the format here: https://github.com/ndjson/ndjson-spec -# data_format = "influx" - - -# # 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. -# # 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 - - -# # 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 -# # 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]] -# ## Program to run as daemon -# command = ["telegraf-smartctl", "-d", "/dev/sda"] -# -# ## Define how the process is signaled on each collection interval. -# ## Valid values are: -# ## "none" : Do not signal anything. -# ## The process must output metrics by itself. -# ## "STDIN" : Send a newline on STDIN. -# ## "SIGHUP" : Send a HUP signal. Not available on Windows. -# ## "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" -# -# ## 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" -# -# ## enable client-side TLS and define CA to authenticate the device -# # enable_tls = true -# # tls_ca = "/etc/telegraf/ca.pem" -# # insecure_skip_verify = true -# -# ## define client-side TLS certificate & key to authenticate to the device -# # tls_cert = "/etc/telegraf/cert.pem" -# # tls_key = "/etc/telegraf/key.pem" -# -# ## 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 = "" -# -# ## Define additional aliases to map telemetry encoding paths to simple 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 (one of: "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" -# -# #[[inputs.gnmi.subscription]] -# # name = "descr" -# # origin = "openconfig-interfaces" -# # path = "/interfaces/interface/state/description" -# # subscription_mode = "on_change" -# -# ## If tag_only is set, the subscription in question will be utilized to maintain a map of -# ## tags to apply to other measurements emitted by the plugin, by matching path keys -# ## All fields from the tag-only subscription will be applied as tags to other readings, -# ## in the format _. -# # tag_only = true - - -# # Accept metrics over InfluxDB 1.x HTTP API -# [[inputs.http_listener]] -# ## DEPRECATED: The 'http_listener' plugin is deprecated in version 1.9.0, has been renamed to 'influxdb_listener', use 'inputs.influxdb_listener' or 'inputs.http_listener_v2' instead. -# ## Address and port to host InfluxDB 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 = "32MiB" -# -# ## Optional tag name used to store the database. -# ## 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. -# # 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 = "" -# -# ## 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 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" -# -# ## Influx line protocol parser -# ## 'internal' is the default. 'upstream' is a newer parser that is faster -# ## and more memory efficient. -# # parser_type = "internal" - - -# # Generic HTTP write listener -# [[inputs.http_listener_v2]] -# ## Address and port to host HTTP listener on -# service_address = ":8080" -# -# ## 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"] -# -# ## 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" -# -# ## 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 InfluxDB 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 = "32MiB" -# -# ## Optional tag name used to store the database. -# ## 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. -# # 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 = "" -# -# ## 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 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" -# -# ## 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 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" - - -# # Intel Performance Monitoring Unit plugin exposes Intel PMU metrics available through Linux Perf subsystem -# [[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 Resource Director Technology plugin -# [[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 - - -# # Read JTI OpenConfig Telemetry from listed sensors -# [[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", -# ] -# -# ## Optional TLS Config -# # enable_tls = 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 = 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" -# -# ## 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"] -# -# ## Topics to consume. -# topics = ["telegraf"] -# -# ## When set this tag will be added to all metrics with the topic as the value. -# # topic_tag = "" -# -# ## Optional Client id -# # client_id = "Telegraf" -# -# ## Set the minimal supported Kafka version. Setting this enables the use of new -# ## Kafka features and APIs. Must be 0.10.2.0 or greater. -# ## ex: version = "1.1.0" -# # version = "" -# -# ## 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 -# -# ## SASL authentication credentials. These settings should typically be used -# ## with TLS encryption enabled -# # sasl_username = "kafka" -# # sasl_password = "secret" -# -# ## Optional SASL: -# ## one of: OAUTHBEARER, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI -# ## (defaults to PLAIN) -# # sasl_mechanism = "" -# -# ## used if sasl_mechanism is GSSAPI (experimental) -# # 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 (experimental) -# # sasl_access_token = "" -# -# ## 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 length of a message to consume, in bytes (default 0/unlimited); -# ## larger messages are dropped -# max_message_len = 1000000 -# -# ## Maximum messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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" -# -# ## 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 metrics from Kafka topic(s) -# [[inputs.kafka_consumer_legacy]] -# ## DEPRECATED: The 'kafka_consumer_legacy' plugin is deprecated in version 1.4.0, use 'inputs.kafka_consumer' instead, NOTE: 'kafka_consumer' only supports Kafka v0.8+. -# ## topic(s) to consume -# topics = ["telegraf"] -# -# ## an array of Zookeeper connection strings -# zookeeper_peers = ["localhost:2181"] -# -# ## Zookeeper Chroot -# zookeeper_chroot = "" -# -# ## the name of the consumer group -# consumer_group = "telegraf_metrics_consumers" -# -# ## Offset (must be either "oldest" or "newest") -# offset = "oldest" -# -# ## 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" -# -# ## Maximum length of a message to consume, in bytes (default 0/unlimited); -# ## larger messages are dropped -# max_message_len = 65536 - - -# # 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 (only 'TRIM_HORIZON' and 'LATEST' currently supported) -# # shard_iterator_type = "TRIM_HORIZON" -# -# ## Maximum messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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" -# -# ## -# ## The content encoding of the data from kinesis -# ## 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 (aws -# ## also base64 encodes the zip byte data before pushing to the stream. The base64 decoding -# ## is done automatically by the golang sdk, as data is read from kinesis) -# ## -# # content_encoding = "identity" -# -# ## Optional -# ## Configuration for a dynamodb checkpoint -# [inputs.kinesis_consumer.checkpoint_dynamodb] -# ## unique name for this consumer -# app_name = "default" -# table_name = "default" - - -# # 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" 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" -# # ## 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://127.0.0.1:50001" -# ] - - -# # Stream and parse log file(s). -# [[inputs.logparser]] -# ## DEPRECATED: The 'logparser' plugin is deprecated in version 1.15.0, use 'inputs.tail' with 'grok' data format instead. -# ## Log files to parse. -# ## 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 -> only tail the apache log file -# files = ["/var/log/apache/access.log"] -# -# ## Read files that currently exist from the beginning. Files that are created -# ## while telegraf is running (and that match the "files" globs) will always -# ## be read from the beginning. -# from_beginning = false -# -# ## Method used to watch for file updates. Can be either "inotify" or "poll". -# # watch_method = "inotify" -# -# ## Parse logstash-style "grok" patterns: -# [inputs.logparser.grok] -# ## This is a list of patterns to check the given log file(s) for. -# ## Note that adding patterns here increases processing time. The most -# ## efficient configuration is to have one pattern per logparser. -# ## Other common built-in patterns are: -# ## %{COMMON_LOG_FORMAT} (plain apache & nginx access logs) -# ## %{COMBINED_LOG_FORMAT} (access logs + referrer & agent) -# patterns = ["%{COMBINED_LOG_FORMAT}"] -# -# ## Name of the outputted measurement name. -# measurement = "apache_access_log" -# -# ## Full path(s) to custom pattern files. -# custom_pattern_files = [] -# -# ## Custom patterns can also be defined here. Put one pattern per line. -# custom_patterns = ''' -# ''' -# -# ## Timezone allows you to provide an override for timestamps that -# ## don't already include an offset -# ## e.g. 04/06/2016 12:41:45 data one two 5.43µs -# ## -# ## Default: "" which renders UTC -# ## Options are as follows: -# ## 1. Local -- interpret based on machine localtime -# ## 2. "Canada/Eastern" -- Unix TZ values like those found in https://en.wikipedia.org/wiki/List_of_tz_database_time_zones -# ## 3. UTC -- or blank/unspecified, will return timestamp in UTC -# # timezone = "Canada/Eastern" -# -# ## When set to "disable", timestamp will not incremented if there is a -# ## duplicate. -# # unique_timestamp = "auto" - - -# # 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://127.0.0.1:1883"] -# ## Topics that will be subscribed to. -# topics = [ -# "telegraf/host01/cpu", -# "telegraf/+/mem", -# "sensors/#", -# ] -servers = ["tcp://192.168.26.1:1883"] # адрес vm с mqtt-брокером -topics = [ - "sensors/#" -] -data_format = "value" -data_type = "float" -# # topic_fields = "_/_/_/temperature" -# ## 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 messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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. -# # 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 -# ## 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 -# ## [[inputs.mqtt_consumer.topic_parsing]] -# ## topic = "" -# ## measurement = "" -# ## tags = "" -# ## fields = "" -# ## [inputs.mqtt_consumer.topic_parsing.types] -# ## - - -# # Read metrics from NATS subject(s) -# [[inputs.nats_consumer]] -# ## urls of NATS servers -# servers = ["nats://localhost:4222"] -# -# ## subject(s) to consume -# subjects = ["telegraf"] -# -# ## name a queue group -# queue_group = "telegraf_consumers" -# -# ## Optional credentials -# # username = "" -# # password = "" -# -# ## Optional NATS 2.0 and NATS NGS compatible user credentials -# # credentials = "/etc/telegraf/nats.creds" -# -# ## 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 -# -# ## Maximum messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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 NSQ topic for metrics. -# [[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 -# -# ## Maximum messages to read from the broker that have not been written by an -# ## output. For best throughput set based on the number of metrics within -# ## each message and the size of the output's metric_batch_size. -# ## -# ## For example, if each message from the queue contains 10 metrics and the -# ## output metric_batch_size is 1000, setting this to 100 will ensure that a -# ## full batch is collected and the write is triggered immediately without -# ## waiting until the next flush_interval. -# # 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" - - -# # 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" -# -# ## 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]]@localhost[/dbname]\ -# ## ?sslmode=[disable|verify-ca|verify-full] -# ## or a simple string: -# ## host=localhost user=pqgotest password=... sslmode=... dbname=app_production -# ## -# ## All connection parameters are optional. -# ## -# address = "host=localhost user=pgbouncer sslmode=disable" - - -# # 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] -# ## or a simple string: -# ## host=localhost 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" -# ## 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) -# 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]]@localhost[/dbname]\ -# ## ?sslmode=[disable|verify-ca|verify-full] -# ## or a simple string: -# ## host=localhost 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" -# -# ## connection configuration. -# ## maxlifetime - specify the maximum lifetime of a connection. -# ## default is forever (0s) -# max_lifetime = "0s" -# -# ## 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 -# -# ## A list of databases to pull metrics about. If not specified, metrics for all -# ## databases are gathered. -# ## databases = ["app_production", "testing"] -# # -# ## 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" -# # -# ## Define the toml config where the sql queries are stored -# ## New queries can be added, if the withdbname is set to true and there is no -# ## databases defined in the 'databases field', the sql query is ended by a -# ## 'is not null' in order to make the query succeed. -# ## Example : -# ## The sqlquery : "SELECT * FROM pg_stat_database where datname" become -# ## "SELECT * FROM pg_stat_database where datname IN ('postgres', 'pgbench')" -# ## because the databases variable was set to ['postgres', 'pgbench' ] and the -# ## withdbname was true. Be careful that if the withdbname is set to false you -# ## don't have to define the where clause (aka with the dbname) the tagvalue -# ## field is used to define custom tags (separated by commas) -# ## The optional "measurement" value can be used to override the default -# ## output measurement name ("postgresql"). -# ## -# ## 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 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. -# ## -# ## Structure : -# ## [[inputs.postgresql_extensible.query]] -# ## sqlquery string -# ## version string -# ## withdbname boolean -# ## tagvalue string (comma separated) -# ## measurement string -# ## timestamp string -# [[inputs.postgresql_extensible.query]] -# sqlquery="SELECT * FROM pg_stat_database" -# version=901 -# withdbname=false -# tagvalue="" -# measurement="" -# [[inputs.postgresql_extensible.query]] -# sqlquery="SELECT * FROM pg_stat_bgwriter" -# version=901 -# withdbname=false -# tagvalue="postgresql.stats" - - -# # 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. When using the prometheus_client output, use the same -# ## value in both plugins to ensure metrics are round-tripped without -# ## modification. -# ## -# ## example: metric_version = 1; -# ## metric_version = 2; recommended version -# # 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 -# -# ## 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 Kubernetes pods for the following prometheus annotations: -# ## - prometheus.io/scrape: Enable scraping for this pod -# ## - 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 -# # monitor_kubernetes_pods = true -# ## 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 -# ## Restricts Kubernetes monitoring to a single namespace -# ## ex: monitor_kubernetes_pods_namespace = "default" -# # monitor_kubernetes_pods_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" -# -# ## 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}}" -# -# ## 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 = "" -# -# ## Specify timeout duration for slower prometheus clients (default is 3s) -# # response_timeout = "3s" -# -# ## 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 - - -# # RAS plugin exposes counter metrics for Machine Check Errors provided by RASDaemon (sqlite3 output is required). -# [[inputs.ras]] -# ## Optional path to RASDaemon sqlite3 database. -# ## Default: /var/lib/rasdaemon/ras-mc_event.db -# # db_path = "" - - -# # 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" - - -# # 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 = "" - - -# # 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 -# # path = ["/usr/share/snmp/mibs"] -# ## -# ## Snmp version, defaults to 2c -# # version = "2c" -# ## 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" -# ## 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" -# -# ## Change the file mode bits on unix sockets. These permissions may not be -# ## respected by some platforms, to safely restrict write permissions it is best -# ## to place the socket into a directory that has previously been created -# ## with the desired permissions. -# ## ex: socket_mode = "777" -# # socket_mode = "" -# -# ## Maximum number of concurrent connections. -# ## Only applies to stream sockets (e.g. TCP). -# ## 0 (default) is unlimited. -# # max_connections = 1024 -# -# ## Read timeout. -# ## Only applies to stream sockets (e.g. TCP). -# ## 0 (default) is unlimited. -# # read_timeout = "30s" -# -# ## Optional TLS configuration. -# ## Only applies to stream sockets (e.g. 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. -# ## 0 disables keep alive probes. -# ## Defaults to the OS configuration. -# # keep_alive_period = "5m" -# -# ## 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" -# -# ## Content encoding for message payloads, can be set to "gzip" to or -# ## "identity" to apply no encoding. -# # content_encoding = "identity" - - -# # 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@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, i.e. the connections -# ## will not be closed automatically. If you specify a positive time, the connections will be closed after -# ## idleing 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 -# -# [[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 ommited, 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/denisenkom/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;", -# ] -# -# ## Authentication method -# ## valid methods: "connection_string", "AAD" -# # auth_method = "connection_string" -# -# ## "database_type" enables a specific set of queries depending on the database type. -# ## 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"] -# -# ## Queries enabled by default for database_type = "SQLServer" are - -# ## SQLServerPerformanceCounters, SQLServerWaitStatsCategorized, SQLServerDatabaseIO, SQLServerProperties, SQLServerMemoryClerks, -# ## SQLServerSchedulers, SQLServerRequests, SQLServerVolumeSpace, SQLServerCpu, SQLServerAvailabilityReplicaStates, SQLServerDatabaseReplicaStates -# -# ## 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 - - -# # Statsd UDP/TCP Server -# [[inputs.statsd]] -# ## Protocol, must be "tcp", "udp", "udp4" or "udp6" (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 -# -# ## 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 tags in the datadog statsd format -# ## http://docs.datadoghq.com/guides/dogstatsd/ -# parse_data_dog_tags = false -# -# ## Parses datadog extensions to the statsd format -# 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 -# -# ## 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 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 -# -# ## Max duration (TTL) for each metric to stay cached/reported without being updated. -# #max_ttl = "1000h" -# -# ## 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 charachters not -# ## matching 'a-zA-Z_\-0-9\.;='. -# #sanitize_name_method = "" - - -# # Suricata stats and alerts plugin -# [[inputs.suricata]] -# ## Data sink for Suricata stats and alerts logs -# # This is expected to be a filename of a -# # unix socket to be created for listening. -# source = "/var/run/suricata-stats.sock" -# -# # Delimiter for flattening field keys, e.g. subitem "alert" of "detect" -# # becomes "detect_alert" when delimiter is "_". -# delimiter = "_" -# -# ## Detect alert logs -# # alerts = false - - -# # Accepts syslog messages following RFC5424 format with transports as per RFC5426, RFC5425, or RFC6587 -# [[inputs.syslog]] -# ## Specify an ip or hostname with port - eg., tcp://localhost:6514, tcp://10.0.0.1:6514 -# ## 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). -# server = "tcp://:6514" -# -# ## TLS Config -# # tls_allowed_cacerts = ["/etc/telegraf/ca.pem"] -# # tls_cert = "/etc/telegraf/cert.pem" -# # tls_key = "/etc/telegraf/key.pem" -# -# ## Period between keep alive probes. -# ## 0 disables keep alive probes. -# ## Defaults to the OS configuration. -# ## Only applies to stream sockets (e.g. TCP). -# # keep_alive_period = "5m" -# -# ## Maximum number of concurrent connections (default = 0). -# ## 0 means unlimited. -# ## Only applies to stream sockets (e.g. TCP). -# # max_connections = 1024 -# -# ## Read timeout is the maximum time allowed for reading a single message (default = 5s). -# ## 0 means unlimited. -# # read_timeout = "5s" -# -# ## The framing technique with which it is expected that messages are transported (default = "octet-counting"). -# ## Whether the messages come using the octect-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" -# -# ## 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 = "_" - - -# # 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"] -# -# ## Read file from beginning. -# # from_beginning = false -# -# ## Whether file is a named pipe -# # pipe = false -# -# ## Method used to watch for file updates. Can be either "inotify" or "poll". -# # 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" -# -# ## 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" -# -# ## This field must be either "previous" or "next". -# ## If a line matches the pattern, "previous" indicates that it belongs to the previous line, -# ## whereas "next" indicates that the line belongs to the next one. -# #match_which_line = "previous" -# -# ## The invert_match field 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 -# -# ## After the specified timeout, this plugin sends a multiline event even if no new pattern -# ## is found to start a new event. The default timeout is 5s. -# #timeout = 5s - - -# # Generic TCP listener -# [[inputs.tcp_listener]] -# ## DEPRECATED: The 'tcp_listener' plugin is deprecated in version 1.3.0, use 'inputs.socket_listener' instead. -# # DEPRECATED: the TCP listener plugin has been deprecated in favor of the -# # socket_listener plugin -# # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener - - -# # Generic UDP listener -# [[inputs.udp_listener]] -# ## DEPRECATED: The 'udp_listener' plugin is deprecated in version 1.3.0, use 'inputs.socket_listener' instead. -# # DEPRECATED: the TCP listener plugin has been deprecated in favor of the -# # socket_listener plugin -# # see https://github.com/influxdata/telegraf/tree/master/plugins/inputs/socket_listener - - -# # Read metrics from VMware vCenter -# [[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 -# -# ## 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 -# -# ## 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" - - -# # A Webhooks Event collector -# [[inputs.webhooks]] -# ## Address and port to host Webhook listener on -# service_address = ":1619" -# -# [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 = "" - - -# # This plugin implements the Zipkin http server to gather trace and timing data needed to troubleshoot latency problems in microservice architectures. -# [[inputs.zipkin]] -# # path = "/api/v1/spans" # URL path for span data -# # port = 9411 # Port on which Telegraf listens - diff --git a/vms/server/telegraf/telegraf.conf b/vms/server/telegraf/telegraf.conf new file mode 100644 index 0000000..9678b73 --- /dev/null +++ b/vms/server/telegraf/telegraf.conf @@ -0,0 +1,23 @@ +[agent] + interval = "10s" + round_interval = true + metric_batch_size = 1000 + metric_buffer_limit = 10000 + collection_jitter = "0s" + flush_interval = "10s" + flush_jitter = "0s" + precision = "" + hostname = "telegraf" + omit_hostname = false + +[[outputs.influxdb]] + urls = ["http://influxdb:8086"] + database = "sensors" + username = "telegraf" + password = "telegraf" + +[[inputs.mqtt_consumer]] + servers = ["tcp://192.168.0.150:1883"] + topics = ["/sensor/+"] + data_format = "value" + data_type = "float" \ No newline at end of file From 8a56f1a9cb1422c0e8ade4333291555bfc61a70f Mon Sep 17 00:00:00 2001 From: Daniil <86617103+Palllladium@users.noreply.github.com> Date: Thu, 22 May 2025 23:14:54 +0300 Subject: [PATCH 2/2] Update report.md --- report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/report.md b/report.md index a7fa228..738f5e7 100644 --- a/report.md +++ b/report.md @@ -104,7 +104,7 @@ CREATE USER telegraf WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES Финальные результаты работы: -![Grafana](assets/images/Grafana.png) +![Grafana](assets/images/grafana.png) Представленные скриншоты подтверждают работоспособность системы. -Все необходимые файлы приложены в репозитории. \ No newline at end of file +Все необходимые файлы приложены в репозитории.