From 434bd492a2e6944591e1bfb3188496b84320674a Mon Sep 17 00:00:00 2001 From: phit Date: Tue, 18 Apr 2017 11:35:12 +0200 Subject: [PATCH] 1.1.0 * updated Grafana Template * renamed some metrics * mc_loaded_chunks_total > mc_loaded_chunks * mc_players_online_total > mc_players_online * mc_entities_total > mc_entities * mc_tile_entities_total > mc_tile_entities * got rid of all the Jetty logspam --- build.gradle | 4 +- logo.png | Bin 0 -> 22805 bytes minecraft-grafana.json | 132 +++++++++++++----- .../prometheusexporter/JettyNullLogger.java | 54 +++++++ .../prometheusexporter/MetricsController.java | 19 +-- .../PrometheusExporter.java | 37 +++-- 6 files changed, 182 insertions(+), 64 deletions(-) create mode 100644 logo.png create mode 100644 src/main/java/de/sldk/mc/prometheusexporter/JettyNullLogger.java diff --git a/build.gradle b/build.gradle index c743cb44..f2b84de6 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'de.sldk.mc.prometheusexporter' -version = '1.0.4' +version = '1.1.0' description = "Sponge Minecraft Prometheus Exporter" ext.url = 'https://github.com/Stonebound/minecraft-prometheus-exporter' @@ -60,7 +60,7 @@ blossom { def location = 'src/main/java/de/sldk/mc/prometheusexporter/PluginInfo.java' replaceToken '@name@', project.name, location - replaceToken '@version@', version, location + replaceToken '@version@', project.version, location replaceToken '@description@', project.description, location replaceToken '@url@', project.url, location } diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..01bae9f742b2e37226a2d2005332ee1f2129d721 GIT binary patch literal 22805 zcmeI3cQl+^)bK}-5H(Sv4I;WR>L}5B3nEGg#>`-}QAQUT1knjW^b#RO3lgFeM2UzJ z1kr*hK}3RR-^lHA@3rn)-~0aaE@urh`|Pv#KIeD#KJ!@CiO|b&AT5Id0FYWm8kwR^b#js^f^<$YYCFh>L$XoIjrx?JK|t8L@}BH@=fOvH7CbzPMa_DBsscf=JxJtLT( zBTNd;Auo4Y)<+uaz!`yt0)3pFTs)+GE^++yD~7uqXs5DJ29Jmx73h2>?Ze!4e>0DG*ppP#7#NEF~=r2L9SOpg6N4lbsC>P+7U#Jbr6Mcz;<0#PY?bmfVyZ#=?#p73YSc)JYs4EC8BnV=)juPgh~}w|p6*UR z`M_ZygcHIUYvO^OJoq1{;A)RTqde?U|FZ7i)&IJBG}88u&H2j`jx_&jhVViDi`kLp z7qg$K@XHR#V)IX0*&P8zquh;9C?~mJvP}QC*#ni8kFrV<$YX+Zfup=Vcx6GjCV%Yr zAKnluP&7jB$Wl;PR8SaV1QwPCi%W}3@*gFp@SmLgG7`s!E;je!P&D+vc=^j%Tt6r{ z($@DsdHG}HUw!E6N^81!prI}>grYlL@980J0|&!wAP_JXBeoR5 zV1%Tg4NM9m2$uvyZN8mr9^Dta51spLi~f9zlG93dSJ83_fJ`d&9$E=&lQB*UweO3 zI3a(YAg)k%55!SnUgG$zGJijEem_x;Yk7@mG`KuZ7 z@7wv`5d7l*Pv-v~!`mL=a$NfV;_Bz9e|O@6vPFAC-4Tj**bMnEmHCU;znbB?mjxZ2 z)lSI&g^loldj0=x!+)!){}bErM;62Ep)Pg^xE$!W1pck#zwO*F`}x<(`mI|3UWu}B zn6xd*-5H9OLpnq45Fl3 z84LYconTqe-}-RJn;uoWljqOzk|M&`1_B@b{?+u)YFtyZ<4ymp#x?!J@~R6GEhqA8 zG@R}~Ssi_YO87ZsNU;dbL%=p%g)PNphI>^bjobY6i)uwM;7jc_&p zXleGZmVeUxYWYht{OQ5$XO;ibi+$|FK5>G6f8_kz0r2}d`9JyLk0t$2dd2Z|5(Edx z@!|=tl)#S>h|^TE-c;KBiNym*4^cs@AV6I?hzju%gG9nS|xdx8rG$noL{ zuH*UOXisqA06AVf!F4v%pm+7nzjK#mtra2?MFM|*+`2gvc_39jS$ z;Al^9;Q%>aJi&E59~|uoE*v1oizm2_=Yyj?!G#0lc=1?Vr~kObiEzQ*-1Np?(fszY z=IDMX5T;?M3jp|WVXujX0029O*!M*Mz*86iSh5BHq*DO^dej}OHZ=f%HCIzb(a7h$ zjS~{N^F{&B8ftBA&GUT~?z3YMte9~~q!(Im-d!Fk+RUIG`?B@iv|;oBk+4aV0;cm? z|CuI)=+kDOdQ6E_#|?ag4^XA&ofdNtf}dndt1R zt;z^Wn3lI_ zJ~KK;&UR5N_htQTJtq&b&Hb0lZz_dp-tfCnM-vhz+FkP(VQ#}XFWdm{)m&{o=M8Mw z<+~;MzT~!J&U)ihx8_lrY^&)vI>V}083#X%t5WZ_zHBM8kdOaKa%-4=kJ!GU;dNOL zkbz6Ibojf??Yio$Bi;0~G8zXl8-hbdhKS1=BTohVjKjV_HwY_4by}@1+7i#-ya~?3 z-Y3Rl2xf|363e_}69oO-=^Ey375b|C^h3P?#%+i^c;&^%PS>4sR^!kNr%8sV7TmMn zAGSI@jXam6ad!GfOaTJQTu)vaQzleZrvKzVcz|Z^Xa>m3yY- zn!5CPWJd6^RU@9(*LGckK>J%UZg={Y1H~nG_q>nE6 ztP|EFM(!{6t_OusT6*k5ZEQ^+(qnQZR`>XbvzcnC421oyE-I=E$YmTwY?|`g1%!>0 zP{@Vtn0GTWP>B=Oz29r^iWri8TZ)RH#8Xn3>fnC5$tc^XR4u_ySjHt_!=D^==ly+| zDJFhyg5k9_9@6EKGJM4wT_`r|Vm?i;Carn^@oSUk3<9j#ZH^GR_0X7fXjKW@cXtef z>vf%&=@+TzL$GN?etM0qwN28&FK6?9U&uZ;nM|w5KCpjm>m`0JYK>7R%MwntcMvp9 zCL`G@#d|4ip>D?K8+NO)d!6@);FVBhJ-MW)2ALfDSiJn9DZ@OQ2G=BBn&B{&VEUC@ z@_D`vM)<9)J`iCae;!HcU52AP2>8*fKJ+5H=sgv&+>M10bHDEmysb%@MCGAd&a~pQ9E@Kml8?w4e}+!VaC-ueZ=-x%4yr(-42G9I23$) zH|(5Hn8AdSx*jK}gmVRe?uG`y+6Ktw!qSh<8itE5ps?YuT5GH}4BLrB2G;fSbZRP- z+1aM%1MoR~C*p~7N@CsLi$;{m4-eyVEb~~_w~LuS(5{>VHbqfc!%_d4doyFpjae$P&Unr?t5N%R@(*+JIdefSIyy9+}H20;!CO;F+5?-QY+?OWr1zC_Cz;M zHr+@3lRe1Duy-g9^$ zGEQS)3jq~q>&s*O92b!sku7X}B&U*0`1?4FPf?!Zi%FOw6MxHN6mu#93_qBpN-$<^q-j3Y;W%kW< zcf9IZK|AfWTZKgHnV~yGyjM*!_URC+uOX~+_kURUyPsRw8s-3dT@*MwRl!v9Zpa!H z$o*2g1=OgSs2E#jtWZ@#oPJhbwreO-vD7K^8u(Mg>AKR>Yg~Z75bq0?=fCGZ+o$RI z?o&!Y8EZG|GVBY#a2U+jd3$9rP(vkl-4GCAGPyN9p%5|ET-f8Tb8qg`&O^kL#(mb|8grW!KUVacLG?}q^S=Z; zYM;8!=4v!{JO91fI}gQ%4JNfi9>!&nD+i+b)YOEhf~69R^4EZZ^b$iNL3I&$_s!a= zm&<%Bz11Rx=}Md8E{K=ve}0rXRZLHBy8NTVeKa#iRqs*-DacK#y!IRC19OpwPu*p= zK5~k9TMw6|Q&53~fH1GKj1~DjEO~`@WxJ&S`2sP|@$EaWJWXxnCv4P+dgpfUMf_LU zN%MML<`DHX+P>7y5to&7VzuAQyT5QtH+z#!@dp4GqfH#PCo5w+`~lzNBni-u0^9vI{8_WXnb*xt)y|ntr_-i?j6!{_GLCB2>|`jyM@n;#Ds7k6sV6}_k)4I_0Zu@ zIo=qgF=h4NAfoeUo_#@Yvtd|Flpx}5JglK4ogdDosoyLRQ4lx@derjp1MxKu$`qQt zG=tSMV=9#c5Al8A`%LBt{Rp6(vSg4SV+| ztXe#BIUOlqh(@NOLL7r=ZwP9nrO!ESX_{$tf8Fw8eU;9T(_p+g7hmdhZ=G6VP&51HSDi$f0ZZ;mxaRoXv zn1>&%TB%S|1$3^ds!Up)9%)7Tm-G!N?Q!4uBsICy;1ReG@ceLV_previw)Su?*c#9 zCv?8O`A$^4cHxW(5i?_DP$w8K=jlpEb>o@4!Ru@TfeNL($=O!+>AGGHw?lM9w0|sh=C@P&3@DaJJznR z@2c<8O90Rxc^=IzX7{s#KtN;9>^dV}vp&w|xUCy)u6vI2qnTX|uIjV;FUu58g z)I+habQtUBTd(i(DKhTvk(QCqH;JSYq&{q&pl0^{OisrgCzLUo(-&@6LH+!+yv3nw z?;Qa!!IZ6e4G+D;q^!ygqq8w*EZ@^~L#-I=r0W1oj_i&?CmZR)F9H zAlmq<8_jOiA^f$hrd-6M$V3e&@{8^p?RgLYu~S8!#bo0d&fm^+O5aye5SEq&o!xUG z_%L~cZ-&9DK8Bfv{cFm-cQx3x@`aK)6wsECzV7*??@Vi?;T{b5p@pH!6si7^%fyza zJELQqZ&jdv#Sbsv&)7&kcyTF+3Q)9E9UvgP5iRjr-l2N=)C>%qW;Wm;D`YP#^l@wq zPZ*S|T5y^?_LKFh6|KZ=GohmR577A!aE~|2hKP-o;K{9#T35vRdWQ4J z6s~L$?-`mfy6t(%utU{7Gw*)f3*QJ{9!VQk(8?RPpEv_3LXOfWgtsgx7Cbz!`b^>- zQ-+3q&c)KC`&H$7|yprZ8Q++v+bQ!fC zXD@1#>LkB%aZ$cW7P*_|J2ABu+ETAwka@<`@n*304yxyXtVl9tLr9qSNdhc?BH2q~ zJU0~#B@lLDq{A7_U#Q?8mebtL)QE;U+lgr?Z8&nEV63d16z2vwu| z!2OJP@tXU=09XHW+Z!7T>)W;(aSvSzb7b#CcDxd*Orv2_5%=%vk3U?9qBzZ$AI-6F z4j&__(*Qo7@S!$)=quZuN2Io01^(e2AH;@=6pda&*xB7gxp=XKQS&HD4KIC-SGd>!tL&nSsy1Fyg0f9&X_DN%|>e^z>~mb&aR(FAj= zRRoyINmGdyhUsT3ggv$j0Ek$Wo1Z2-MgCO(N+q=_fx_pAiGGtv?|^s1k;Ir_J0Pc& z3BziJr`hrk^943Q;6vfGp59)W3Zd>#OPQWkR51ddlesIt6DqPEE;UnpguIBCb5IYO zh&Ij?e&_8<7AzD)ZT!vMw31(#>+bY+D_LEgMjoDUrACxkGNeiHo!Yp#%Pn6dYmfF< z+v~kUcM%C+c^l(~TcfTK`CVPnsZgplt5o~q`jzY5SEGr^YCHvZlaDqXmrZHl=kk3BNy3SSEXt!|2mY^P> zMbe8llYK+IIUT&4QD9AZ(?JUqeO*!`^IFi+sa1GJG8NM-%nQ@3YgSJv8H+IA#z=GQb7Dj%SY|K250B#o$eG~_m0ZFo3$FO# zT``o>3Hw&Jp~J*BPndH_kly*l)pEAe1EU)KHoa;IF18(T|Evl4r9;!_X%*oSQkVO3 z`&`31M4Ss1s+=dba@WD2596;!gK7o(cijj8snl1kX&~BJ9It49lsDh@(8^{CPd`vN zn7Yzl-f=noLnxQH=mDpqP;H$pC`nF|LbgV0S!M)P!mb{L7jet2FfM0kepMw!ZRBa- zczy>r%~^;Qn(A~m30FO(y@?ywDFvFGwPGutD+bwBXIhyf#lO-4`a_c9qs`66-1r@3 z?gs(LId5FJDr7ob|5OEX*1=SqnEd`H!eWXy{(vG0!Gxwq5>1cjvh@z-{Y`!hzVlR% z+uW?=BxP4vsf`{bml(8WK2I_RMT8Q!1X!2(&|Us;)MY{$`Dyqdt)PTyGwiM25b_?2YN`xxE6gUwCCQ|JcL`@0|Nx5oDmdZjjh;DxiSz^R#C z2+=|A33zN72h8IR~j>AS&B+ zvz(?ZdABEr7~H>%?#DHAve^62iLPtPT%?b))-ewvx)Jy?UNQJ{`&?M5epy^=48=LT zC+SLib7PZgEX#|o8%i%|%SM_$)-s_R3J0Snit;;v2VU_#nXL3&D9yGNInCv8UsHZw5i5yb>%BXVJB)zM%Pr>+B z-E1R4=^EL?AZ2X;cG9Tc1Ja#HJA+FXK+de$8M|UjtoIv=I_xx;T)*^*dWe`g`q!Mc zF0b3(>AVR5gwa2GD?Y(I2-M*lSAZ=l8_k`08z@EB9W|?Zxli2FVHZ`uln60jE zJx7xsR;_xq*@Y4>Q5QcviljD?68pkZ?ueS=i%U6Em`)h(8f0D5Z0p~|6)<~uMNjTQ zO1ILZ5w7wm!c(CS3pjlszUTcCIfOv_x~Oe_BAOs-t$TE4PgT!8c%zi?^v;t-AKIo_ z#O(6wmT)O((vfr)R$J~9P z6JfmxB;|f@Srh5zOyr_cro`8KYO^TE|EoH$IXNU%>l~x~0?gQi=B+Y}`<5OPp&rvM zJsFMXw9Ij2_dAGMX2a+OAfy!IPWb7Bq$JHDF&|sCPUrPkYo*@6q!gPM^S7ry5c%jG ztf@J`g8wo=6o$mZv`_hyOgh@N7IT(M@!j&*x2L0qK zSA;eoQJ2PmYT_9qLuYw|ath@92y+mJrXxrwzOQ*c5|HfZ4k;vDH@yvnaaDCq8dky$ zILIau>dBq40*R%-DodUYA3xp)1Ce?C%44+n(T@DCcI)^BLrr~3;znk(W7!j|9C`jG zujp!%$wE|DJ*Lst4MLB^w8%Y*hA2>uwNk(b*D1a}Weza!58k-TEB1P;-RJ?*m>@0t zTh5LdCBT}mn1R6TuJD(ayWs$`9{~ZQ``txC_C3XCXQN`{`mTAB=t)K}-9YX543Jh! z1h}sb^o7=4!+>gUo_)Q)9AY)C({}yr{WsI$odc?zPMy2Tx*SLySLHVSe(E?X9DvEu$}U ziOf5A?I_B^V;Yw|wD2Ump&ZLDe~(z~wLHa6`gD&wgj9r&<(u{6c`rF&Ib(D5pc~5xwF16g9UWQy6X1R&~ zlI)o-JG#9m=g_0t2k*t+LD4Yz)W)kbT@IgyUTT993p;vwr|)BN7x4I@yD$bnp) z-`8hp!^Bp>(78DN7)@0lrIN^xV}h1~p!G#XF`Bt&2807sFEV{lpVBe=MD5t`%id~g zYu5(4*}(1^H)qumk6rCq?|7I6eDAu(-819)4T6gWzHLwH08za65*D=c20wpjVY^)6 zIP;Dc&=lI~&tqY39Z2(vn??Bj%=Zt~Z@1`NzBiImzrpt)1f_qyvX$WSR`h^Epn+t@ z8-KvFT#7*(qb}l_}c9Yj!CMKq}!|k)RMb}333tI0k%QH1v)+A%l zs1dq>Oor?BB7O4WWHBH5C4Fgq>{Pcxb6Pj{QptL%|$aUOCU3xpdTpIg5IBWg zQ!SIKo)08o+PWumFaL$6Xol}uyTMGiPLpILW2hrp>esPqEscaCfdP@HF<;8<-fAU{ zOs&1<8Ws-{bLft+r|Rhdv6E7jcHNY+T|1XS$Y?m6LJChc33%c`lMK*G6mmhTFZ;D# zfUugF2JMUtcq^~kIiCx*kHh5q%YY=!zVw=WPgPl2} zPwm~eH@iragLfAsxxSF*B)~bt=e02Fe(S5R&g?CGQf1gb-AYEMBMZj9lJ}YYXNfXR z@iJ527iZC?HK%@;e{vsatu4*I0EoJy(`8lKL_R9sN@;7+9Wv`;(k6LCG7_;Cd0E*(a;D|uCADOOqcV06P5=CDs%za-4gV_1 z-Mfk`d6ZmunBpjw&*E#q?#k$Q_hM7OlkuTxQ#C+{fV=t?V&^^PE*G53uZV95{*eog z)p1L8Q=5no#7X=|OXW zbz#uPMqR^4?81}b&4H|J0gZ~cncl$$xwn;3ERU~cHe(M0Q_&4qQ>{*nVtnM)TxN+o zak>=rPH`l%&k00osoj^)CtYOuT=PoQj5W*F1a=)5qkSL+`Iu^y@yEQCOrJ$314>k)lZe|C}o1sHb9N@nbT41^9!b$ zc*d&kPrerPX*?}Ux>IiFt4D)TLg?~nfpa0LJK8V8+1&ST0zO)TPw)G*M;-lxN>f!& Kr9{a(`2PWp<@`+m literal 0 HcmV?d00001 diff --git a/minecraft-grafana.json b/minecraft-grafana.json index 372cb337..9f4bf4fd 100644 --- a/minecraft-grafana.json +++ b/minecraft-grafana.json @@ -1,8 +1,8 @@ { "__inputs": [ { - "name": "DS_HOST", - "label": "prometheus", + "name": "DS_LOCAL", + "label": "Local", "description": "", "type": "datasource", "pluginId": "prometheus", @@ -43,7 +43,16 @@ "graphTooltip": 1, "hideControls": false, "id": null, - "links": [], + "links": [ + { + "asDropdown": false, + "icon": "external link", + "tags": [ + "server" + ], + "type": "dashboards" + } + ], "refresh": false, "rows": [ { @@ -53,7 +62,7 @@ { "aliasColors": {}, "bars": false, - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "fill": 1, "id": 1, "legend": { @@ -84,7 +93,7 @@ "legendFormat": "{{state}}", "metric": "mc_players_total", "refId": "A", - "step": 4 + "step": 240 } ], "thresholds": [], @@ -131,7 +140,7 @@ "rgba(237, 129, 40, 0.89)", "rgba(50, 172, 45, 0.97)" ], - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "format": "none", "gauge": { "maxValue": 100, @@ -183,7 +192,7 @@ "legendFormat": "", "metric": "mc_players_total", "refId": "A", - "step": 40 + "step": 1800 } ], "thresholds": "0,1", @@ -202,7 +211,7 @@ { "aliasColors": {}, "bars": false, - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "fill": 1, "id": 7, "legend": { @@ -228,12 +237,19 @@ "steppedLine": false, "targets": [ { - "expr": "mc_jvm_memory", + "expr": "mc_jvm_memory{type=\"max\"}", "intervalFactor": 2, "legendFormat": "mem{{type}}", "metric": "mc_jvm_memory", "refId": "A", - "step": 4 + "step": 240 + }, + { + "expr": "mc_jvm_memory{type=\"used\"}", + "intervalFactor": 2, + "legendFormat": "mem{{type}}", + "refId": "B", + "step": 240 } ], "thresholds": [], @@ -276,11 +292,11 @@ "colorBackground": false, "colorValue": false, "colors": [ - "rgba(50, 172, 45, 0.97)", + "rgba(245, 54, 54, 0.9)", "rgba(237, 129, 40, 0.89)", - "rgba(245, 54, 54, 0.9)" + "rgba(50, 172, 45, 0.97)" ], - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "decimals": null, "format": "bytes", "gauge": { @@ -332,11 +348,11 @@ "legendFormat": "", "metric": "mc_jvm_memory", "refId": "A", - "step": 40 + "step": 1800 } ], - "thresholds": "5500000000", - "title": "JVM Memory Used", + "thresholds": "500000000", + "title": "JVM Memory Free", "type": "singlestat", "valueFontSize": "80%", "valueMaps": [ @@ -361,9 +377,51 @@ "height": 250, "panels": [ { + "alert": { + "conditions": [ + { + "evaluator": { + "params": [ + 10 + ], + "type": "lt" + }, + "operator": { + "type": "and" + }, + "query": { + "datasourceId": 2, + "model": { + "expr": "mc_tps{state=\"tps\"}", + "intervalFactor": 2, + "legendFormat": "tps", + "metric": "mc_tps", + "refId": "A", + "step": 40 + }, + "params": [ + "A", + "5m", + "now" + ] + }, + "reducer": { + "params": [], + "type": "avg" + }, + "type": "query" + } + ], + "executionErrorState": "alerting", + "frequency": "60s", + "handler": 1, + "name": "TPS alert Beyond", + "noDataState": "no_data", + "notifications": [] + }, "aliasColors": {}, "bars": false, - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "fill": 1, "id": 9, "legend": { @@ -389,15 +447,23 @@ "steppedLine": false, "targets": [ { - "expr": "mc_tps{state=\"tps\"", + "expr": "mc_tps{state=\"tps\"}", "intervalFactor": 2, "legendFormat": "tps", "metric": "mc_tps", "refId": "A", - "step": 2 + "step": 120 + } + ], + "thresholds": [ + { + "colorMode": "critical", + "fill": true, + "line": true, + "op": "lt", + "value": 10 } ], - "thresholds": [], "timeFrom": null, "timeShift": null, "title": "TPS", @@ -447,7 +513,7 @@ { "aliasColors": {}, "bars": false, - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "fill": 1, "id": 3, "legend": { @@ -473,12 +539,12 @@ "steppedLine": false, "targets": [ { - "expr": "mc_loaded_chunks_total", + "expr": "mc_loaded_chunks", "intervalFactor": 2, "legendFormat": "{{world}}", "metric": "mc_loaded_chunks_total", "refId": "A", - "step": 2 + "step": 120 } ], "thresholds": [], @@ -531,9 +597,9 @@ { "aliasColors": {}, "bars": false, - "datasource": "${DS_HOST}", + "datasource": "${DS_LOCAL}", "fill": 1, - "id": null, + "id": 4, "legend": { "avg": false, "current": false, @@ -557,12 +623,12 @@ "steppedLine": false, "targets": [ { - "expr": "mc_entities_total", + "expr": "mc_entities", "intervalFactor": 2, "legendFormat": "{{world}}_total", "metric": "mc_entities_total", "refId": "A", - "step": 4 + "step": 240 } ], "thresholds": [], @@ -603,7 +669,7 @@ { "aliasColors": {}, "bars": false, - "datasource": "Local", + "datasource": "${DS_LOCAL}", "fill": 1, "id": 10, "legend": { @@ -629,12 +695,12 @@ "steppedLine": false, "targets": [ { - "expr": "mc_tile_entities_total{group=\"dw20\"}", + "expr": "mc_tile_entities", "intervalFactor": 2, "legendFormat": "{{world}}_total", "metric": "mc_entities_total", "refId": "A", - "step": 4 + "step": 240 } ], "thresholds": [], @@ -690,7 +756,7 @@ "list": [] }, "time": { - "from": "now-30m", + "from": "now-24h", "to": "now" }, "timepicker": { @@ -719,6 +785,6 @@ ] }, "timezone": "browser", - "title": "Minecraft", - "version": 6 + "title": "Minecraft Server", + "version": 14 } \ No newline at end of file diff --git a/src/main/java/de/sldk/mc/prometheusexporter/JettyNullLogger.java b/src/main/java/de/sldk/mc/prometheusexporter/JettyNullLogger.java new file mode 100644 index 00000000..37964854 --- /dev/null +++ b/src/main/java/de/sldk/mc/prometheusexporter/JettyNullLogger.java @@ -0,0 +1,54 @@ +package de.sldk.mc.prometheusexporter; + +import org.eclipse.jetty.util.log.Logger; + +public class JettyNullLogger implements Logger { + public String getName() { + return "Jetty"; + } + + public void warn(String s, Object... objects) { + } + + public void warn(Throwable throwable) { + } + + public void warn(String s, Throwable throwable) { + } + + public void info(String s, Object... objects) { + } + + public void info(Throwable throwable) { + } + + public void info(String s, Throwable throwable) { + } + + public boolean isDebugEnabled() { + return false; + } + + public void setDebugEnabled(boolean b) { + } + + public void debug(String s, Object... objects) { + } + + public void debug(String msg, long value) { + + } + + public void debug(Throwable throwable) { + } + + public void debug(String s, Throwable throwable) { + } + + public Logger getLogger(String s) { + return this; + } + + public void ignore(Throwable throwable) { + } +} \ No newline at end of file diff --git a/src/main/java/de/sldk/mc/prometheusexporter/MetricsController.java b/src/main/java/de/sldk/mc/prometheusexporter/MetricsController.java index 63443533..44ebaac3 100644 --- a/src/main/java/de/sldk/mc/prometheusexporter/MetricsController.java +++ b/src/main/java/de/sldk/mc/prometheusexporter/MetricsController.java @@ -6,6 +6,7 @@ import io.prometheus.client.exporter.common.TextFormat; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; +import org.spongepowered.api.Sponge; import org.spongepowered.api.world.World; import javax.servlet.http.HttpServletRequest; @@ -15,12 +16,12 @@ public class MetricsController extends AbstractHandler { private final PrometheusExporter exporter; - private Gauge players = Gauge.build().name("mc_players_total").help("Online and offline players").labelNames("state").create().register(); + private Gauge players = Gauge.build().name("mc_players_total").help("Total online and max players").labelNames("state").create().register(); private Gauge tps = Gauge.build().name("mc_tps").help("Tickrate").labelNames("state").create().register(); - private Gauge loadedChunks = Gauge.build().name("mc_loaded_chunks_total").help("Chunks loaded per world").labelNames("world").create().register(); - private Gauge playersOnline = Gauge.build().name("mc_players_online_total").help("Players currently online per world").labelNames("world").create().register(); - private Gauge entities = Gauge.build().name("mc_entities_total").help("Entities loaded per world").labelNames("world").create().register(); - private Gauge tileEntities = Gauge.build().name("mc_tile_entities_total").help("Entities loaded per world").labelNames("world").create().register(); + private Gauge loadedChunks = Gauge.build().name("mc_loaded_chunks").help("Chunks loaded per world").labelNames("world").create().register(); + private Gauge playersOnline = Gauge.build().name("mc_players_online").help("Players currently online per world").labelNames("world").create().register(); + private Gauge entities = Gauge.build().name("mc_entities").help("Entities loaded per world").labelNames("world").create().register(); + private Gauge tileEntities = Gauge.build().name("mc_tile_entities").help("Entities loaded per world").labelNames("world").create().register(); private Gauge memory = Gauge.build().name("mc_jvm_memory").help("JVM memory usage").labelNames("type").create().register(); public MetricsController(PrometheusExporter exporter) { @@ -33,17 +34,17 @@ public void handle(String target, Request baseRequest, HttpServletRequest reques return; } - players.labels("online").set(exporter.getGame().getServer().getOnlinePlayers().size()); - players.labels("max").set(exporter.getGame().getServer().getMaxPlayers()); + players.labels("online").set(Sponge.getGame().getServer().getOnlinePlayers().size()); + players.labels("max").set(Sponge.getGame().getServer().getMaxPlayers()); - for (World world : exporter.getGame().getServer().getWorlds()) { + for (World world : Sponge.getGame().getServer().getWorlds()) { loadedChunks.labels(world.getName()).set(Iterables.size(world.getLoadedChunks())); playersOnline.labels(world.getName()).set(world.getPlayers().size()); entities.labels(world.getName()).set(world.getEntities().size()); tileEntities.labels(world.getName()).set(world.getTileEntities().size()); } - tps.labels("tps").set(exporter.getGame().getServer().getTicksPerSecond()); + tps.labels("tps").set(Sponge.getGame().getServer().getTicksPerSecond()); memory.labels("max").set(Runtime.getRuntime().maxMemory()); memory.labels("free").set(Runtime.getRuntime().freeMemory()); memory.labels("used").set(Runtime.getRuntime().maxMemory() - Runtime.getRuntime().freeMemory()); diff --git a/src/main/java/de/sldk/mc/prometheusexporter/PrometheusExporter.java b/src/main/java/de/sldk/mc/prometheusexporter/PrometheusExporter.java index 7df2d85d..0b6f375e 100644 --- a/src/main/java/de/sldk/mc/prometheusexporter/PrometheusExporter.java +++ b/src/main/java/de/sldk/mc/prometheusexporter/PrometheusExporter.java @@ -6,7 +6,6 @@ import ninja.leaping.configurate.loader.ConfigurationLoader; import org.eclipse.jetty.server.Server; import org.slf4j.Logger; -import org.spongepowered.api.Game; import org.spongepowered.api.config.DefaultConfig; import org.spongepowered.api.event.Listener; import org.spongepowered.api.event.game.state.GamePreInitializationEvent; @@ -27,11 +26,6 @@ public class PrometheusExporter { @Inject - Logger logger; - - @Inject - private Game game; - private Server server; private int port; @@ -43,6 +37,17 @@ public class PrometheusExporter { private ConfigurationLoader cfgMgr; private ConfigurationNode cfg; + private static PrometheusExporter instance; + public static PrometheusExporter getInstance() { + return PrometheusExporter.instance; + } + + @Inject + private Logger logger; + public Logger getLogger() { + return this.logger; + } + @Listener public void onPreinit(GamePreInitializationEvent event) { logger.info("Setting up config..."); @@ -64,22 +69,22 @@ public void onPreinit(GamePreInitializationEvent event) { @Listener public void onServerStarted(GameStartedServerEvent event) { - server = new Server(port); - - server.setHandler(new MetricsController(this)); - + org.eclipse.jetty.util.log.Log.setLog(new JettyNullLogger()); try { + server = new Server(port); + + server.setHandler(new MetricsController(this)); server.start(); getLogger().info("Started Prometheus metrics endpoint on port " + port); } catch (Exception e) { - getLogger().error("Could not start embedded Jetty server"); + getLogger().error("Could not start embedded Jetty server", e); } } @Listener - public void onGameStopping(GameStoppingServerEvent event) { + public void onServerStop(GameStoppingServerEvent event) { if (server != null) { try { server.stop(); @@ -88,12 +93,4 @@ public void onGameStopping(GameStoppingServerEvent event) { } } } - - public Logger getLogger() { - return logger; - } - - public Game getGame() { - return game; - } }