From 005f2c674a6bd03ab8c32dc5c8c8985469fd28ed Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Mon, 9 Sep 2024 13:34:31 +0200 Subject: [PATCH 01/33] save --- .../prometheusDiagram1.astro | 44 +++++++ .../secure-and-monitor/prometheus2.mdx | 107 ++++++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 astro/src/components/docs/operate/secure-and-monitor/prometheusDiagram1.astro create mode 100644 astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx diff --git a/astro/src/components/docs/operate/secure-and-monitor/prometheusDiagram1.astro b/astro/src/components/docs/operate/secure-and-monitor/prometheusDiagram1.astro new file mode 100644 index 0000000000..225d38a710 --- /dev/null +++ b/astro/src/components/docs/operate/secure-and-monitor/prometheusDiagram1.astro @@ -0,0 +1,44 @@ +--- +import Diagram from 'src/components/mermaid/FlowchartDiagram.astro'; + +const { alt } = Astro.props; + +//language=Mermaid +const code = ` +graph LR + X(Segment) + Y[(PostgreSQL)] + subgraph I[Your server] + subgraph G[Docker] + H[(PostgreSQL)] + end + subgraph C[Docker] + A(FusionAuth) + end + subgraph E[Docker] + B(Filtering web service) + end + subgraph J[Docker] + F(Your app) + end + end + D(User) + D --> F + D --> A + C --> G + F --> A + A --> |Webhook| B + B --> |API call| X + X --> Y + style I fill:#999 + style X fill:#944 + style E fill:#944 + style Y fill:#944 +`; +--- + + \ No newline at end of file diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx new file mode 100644 index 0000000000..92bf310e6c --- /dev/null +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -0,0 +1,107 @@ +--- +title: Monitor with Prometheus +description: Learn how to monitor FusionAuth with Prometheus, Loki, and Grafana. +navcategory: admin +section: operate +subcategory: secure and monitor +--- +import Aside from 'src/components/Aside.astro'; +import IconButton from 'src/components/IconButton.astro'; +import Breadcrumb from 'src/components/Breadcrumb.astro'; +import InlineField from 'src/components/InlineField.astro'; +import InlineUIElement from 'src/components/InlineUIElement.astro'; +import PrometheusJvmGauges from 'src/content/docs/_shared/_prometheus-jvm-gauges.mdx'; +import Diagram1 from 'src/components/docs/operate/secure-and-monitor/prometheusDiagram1.astro'; + +## Introduction + +This guide explains how monitor FusionAuth events and logs with the open-source tools Prometheus and Loki, as well as create a dashboard with Grafana, and send you alerts when problems occur. + +Please read the [FusionAuth monitoring overview](/docs/operate/secure-and-monitor/monitor) before proceeding. The overview explains what FusionAuth metrics are, what activities comprise a complete monitoring workflow, and what Prometheus, Loki, and Grafana are.. Review [alternative monitoring services](/docs/operate/secure-and-monitor/monitor#overview-of-popular-monitoring-tools) in the overview to ensure that Prometheus is the right tool for your needs. + +## Architecture + +Running FusionAuth and PostgreSQL in Docker usually looks like the diagram below (you might also run OpenSearch in another Docker container). + +```mermaid +graph LR + D(User) + subgraph I[Your server] + subgraph G[Docker] + H[(PostgreSQL)] + end + subgraph C[Docker] + A(FusionAuth) + end + subgraph J[Docker] + F(Your app) + end + end + D --> F + D --> A + C --> G + F --> A + style I fill:#999 +``` + +This diagram shows three components that could die and need monitoring: the PostgreSQL database, FusionAuth, and your app (web server) that directs users to FusionAuth for login. In this guide, you will monitor only FusionAuth and PostgreSQL, but you can use similar techniques to monitor your app too. + +## Send Custom FusionAuth Metrics To The Elasticsearch API + +### Which Metrics To Monitor + +FusionAuth has too [many metrics](/docs/operate/secure-and-monitor/monitor#metrics) to discuss in this article. You will need to decide which are important for you to monitor by reading the documentation. + +In addition to the metrics available through the various FusionAuth APIs, you can create your own metrics using any event that can trigger a [webhook](/docs/extend/events-and-webhooks). This webhook can call another Docker container you create that listens for incoming events and forwards them to Elastic. + +A useful metric to start with is login counts. If this number drops from the average, it's a good sign something might be wrong with your system. In this guide, you'll learn how to create a program that uses the FusionAuth API to get the login count, then upload it to Elastic. + +You can add any other metrics you want to this service. + +## Final System Architecture + +A relatively simple but adequate monitoring architecture with Elastic might look as follows. + +```mermaid +graph LR + X(Segment) + Y[(PostgreSQL)] + subgraph I[Your server] + subgraph G[Docker] + H[(PostgreSQL)] + end + subgraph C[Docker] + A(FusionAuth) + end + subgraph E[Docker] + B(Filtering web service) + end + subgraph J[Docker] + F(Your app) + end + end + D(User) + D --> F + D --> A + C --> G + F --> A + A --> |Webhook| B + B --> |API call| X + X --> Y + style I fill:#999 + style X fill:#944 + style E fill:#944 + style Y fill:#944 +``` + +In this design, Elastic Agent monitors all Docker infrastructure and the FusionAuth logs, while the custom metric service provides fine-grained FusionAuth data to Elastic to monitor the app itself. + + +## Next Steps + +Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alerts](https://www.elastic.co/kibana/alerting) to notify you by email or in Slack if something goes wrong, like a massive decrease in login rates, a Docker container restarting, or a log output containing `error`. slack, ntfy.sh, discord + +## Further Reading + +- [Monitoring overview](/docs/operate/secure-and-monitor/monitor) +- [FusionAuth metrics](/docs/operate/secure-and-monitor/monitor#metrics) \ No newline at end of file From 653df199f40052dc38fd2355176843142e75069d Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Mon, 9 Sep 2024 15:21:57 +0200 Subject: [PATCH 02/33] intro to prometheus done --- .../secure-and-monitor/prometheus2.mdx | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 92bf310e6c..1a1f751349 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -15,10 +15,12 @@ import Diagram1 from 'src/components/docs/operate/secure-and-monitor/prometheusD ## Introduction -This guide explains how monitor FusionAuth events and logs with the open-source tools Prometheus and Loki, as well as create a dashboard with Grafana, and send you alerts when problems occur. +This guide explains how monitor FusionAuth events and logs with the open-source tools [Prometheus](https://prometheus.io/docs/introduction/overview) and [Loki](https://grafana.com/oss/loki), as well as create a dashboard with [Grafana](https://grafana.com/grafana), and send you alerts when problems occur. Please read the [FusionAuth monitoring overview](/docs/operate/secure-and-monitor/monitor) before proceeding. The overview explains what FusionAuth metrics are, what activities comprise a complete monitoring workflow, and what Prometheus, Loki, and Grafana are.. Review [alternative monitoring services](/docs/operate/secure-and-monitor/monitor#overview-of-popular-monitoring-tools) in the overview to ensure that Prometheus is the right tool for your needs. +While in this guide you set up Prometheus in Docker containers on your local machine, there is also a paid cloud-hosted alternative at [Grafana Cloud](https://grafana.com/auth/sign-up/create-user). + ## Architecture Running FusionAuth and PostgreSQL in Docker usually looks like the diagram below (you might also run OpenSearch in another Docker container). @@ -37,15 +39,41 @@ graph LR F(Your app) end end - D --> F - D --> A + D --> J + D --> C C --> G - F --> A + F --> C style I fill:#999 ``` This diagram shows three components that could die and need monitoring: the PostgreSQL database, FusionAuth, and your app (web server) that directs users to FusionAuth for login. In this guide, you will monitor only FusionAuth and PostgreSQL, but you can use similar techniques to monitor your app too. +```mermaid +graph LR + D(User) + subgraph I[Your server] + subgraph G[Docker] + H[(PostgreSQL)] + end + subgraph C[Docker] + A(FusionAuth) + end + subgraph E[Docker] + B(Prometheus) + end + subgraph J[Docker] + F(Your app) + end + end + D --> J + D --> C + C --> G + F --> C + C --> |Prometheus pulls from FusionAuth| E + style I fill:#999 + style E fill:#944 +``` + ## Send Custom FusionAuth Metrics To The Elasticsearch API ### Which Metrics To Monitor @@ -104,4 +132,8 @@ Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alert ## Further Reading - [Monitoring overview](/docs/operate/secure-and-monitor/monitor) -- [FusionAuth metrics](/docs/operate/secure-and-monitor/monitor#metrics) \ No newline at end of file +- [FusionAuth metrics](/docs/operate/secure-and-monitor/monitor#metrics) +- [Prometheus](https://prometheus.io/docs/introduction/overview) +- [Loki](https://grafana.com/oss/loki) +- [Grafana](https://grafana.com/grafana) +- [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) \ No newline at end of file From c503db017bc419235e54a6bea62b22755d79f0f9 Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Tue, 10 Sep 2024 13:06:32 +0200 Subject: [PATCH 03/33] got prom to connect to fa but can't see data yet --- .../secure-and-monitor/prometheus2.mdx | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 1a1f751349..4f7264c713 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -46,7 +46,7 @@ graph LR style I fill:#999 ``` -This diagram shows three components that could die and need monitoring: the PostgreSQL database, FusionAuth, and your app (web server) that directs users to FusionAuth for login. In this guide, you will monitor only FusionAuth and PostgreSQL, but you can use similar techniques to monitor your app too. +This diagram shows three components that could die and need monitoring: the PostgreSQL database, FusionAuth, and your app (web server) that directs users to FusionAuth for login. In this guide, you will monitor only FusionAuth and PostgreSQL, but you can use similar techniques to monitor your app. ```mermaid graph LR @@ -69,11 +69,27 @@ graph LR D --> C C --> G F --> C - C --> |Prometheus pulls from FusionAuth| E + C --> |Prometheus pulls metrics from FusionAuth| E style I fill:#999 style E fill:#944 ``` +## Run Prometheus With Docker + +Clone the sample [FusionAuth kickstart repository](https://github.com/FusionAuth/fusionauth-example-docker-compose) with the command below. + +```sh +git clone https://github.com/FusionAuth/fusionauth-example-docker-compose.git +cd light +``` + +Add three new services to the bottom of `docker-compose.yaml` before the `volumes:` section, with the code below. You are using the Docker images from Docker Hub for [Prometheus](https://hub.docker.com/r/ubuntu/prometheus), Loki, and Grafana. + +Configure Prometheus https://prometheus.io/docs/prometheus/latest/configuration/configuration. + + + + ## Send Custom FusionAuth Metrics To The Elasticsearch API ### Which Metrics To Monitor @@ -136,4 +152,5 @@ Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alert - [Prometheus](https://prometheus.io/docs/introduction/overview) - [Loki](https://grafana.com/oss/loki) - [Grafana](https://grafana.com/grafana) -- [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) \ No newline at end of file +- [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) +- [Ubuntu Prometheus Container](https://hub.docker.com/r/ubuntu/prometheus) \ No newline at end of file From b1e7448df8fbc02b236831b64c870027ccc8fe7f Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Tue, 10 Sep 2024 14:22:45 +0200 Subject: [PATCH 04/33] got prometheus chart to work --- .../prometheus/prometheusChart.webp | Bin 0 -> 36248 bytes .../prometheus/prometheusMetrics.webp | Bin 0 -> 34090 bytes .../prometheus/prometheusTargets.webp | Bin 0 -> 25904 bytes .../operate/secure-and-monitor/prometheus2.mdx | 12 ++++++++++++ 4 files changed, 12 insertions(+) create mode 100644 astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp create mode 100644 astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusMetrics.webp create mode 100644 astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp diff --git a/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp b/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp new file mode 100644 index 0000000000000000000000000000000000000000..31d4a81df80621a3a2349f3ccd579ed23d3778f8 GIT binary patch literal 36248 zcmd3OV|ZoTwry;)V%xTD+o{+|#kOtRNyVtxt~jZvV%x@g+56z0d-r|!p7-y~U-MgY ztTjjPz4g}nXk&a!SxQ_yJ_ZO#LrhpvU6GS8`1Ag%2Q&wm+5@rzls`c+OY4!!HCda6<6B`4qR7=f3$!(7dtd z*90hej|W)ZK)=hpnFAE88J-C~_{IQjev1IW1Nd`2qS!vc&OW0GeC$_V^)i|4|B{ zeVu%byZBfFxB;M~N`<%I%v{ZilDpP?QIUKK9*B?L|Z6&EwB0&{>hfZ7@CS?wI) z01yQb0!+V;l+->MY<5Y%!@f?x#a;F!Y#I_w_|<;S9`daAH4llQ6VUbE`vm%7{yy=+ z@C3LMXxfwoEcqP(ggy=*1=cQ)3624eez{N3A0F?G0D`B>d;B*8!28(8xgP+qc6Ipb z0swr>4Bn>yhFchuVhIK-cVRAw_fJ76Rb@s(DOeZ}6$Vk|&QKf`lnzs&#)5)YJTVm^ z0;a~3EjJ+~6RAjn^IIpxm6kH9GV=KuNuVC-Gqkm8uTT%d@KRt+ zxRq?U%0OH9U6gtCQ_*5;Vk;DWp1WM<4L{AVGRm>^4?W860 zF2aVI3{zq0{8^^|-qgfwc9IQl)A_XE7eX%;J|rS4cJx~9_lD4kjkl#UnSX>P+}v{l zwVKFjpPWHb&c^!!L9J2oC&9Y~-5MWm4#0 zUfWdb$Sx*g`_a{rKJ%o0h$X1PCE%496ofj`uJPs3U(Ss>Rpeu2pJyZ#Y{{v@M9@%7 zdDOo*vLpdG0A1#fajBvZU~07Ca8Q+6NMDdu8weSRD@+(>*-ak8Qm|V`Mj|?G0mxUm z9OSeZP`##HNC9{=nZ%eo_r?^&{m;!o^e0M|A*ny*98L08gFc{|b_dj*?h{=aC}D(R z7}ddk_n4ph_Y!f(d@E~w1)iEnR2;baK%wX1s|X#$-1f3k2TmhsGcr)@oGNTu2_IV1 z3Rpy%g*x9<`UyYpdaaGc4-^~XgBa^I=V#w}&HJmI%g_L*U;T!LF_5Ivbv?NsCxDhs z@kYG%g8(i=!w{kj<_bEN!zA~0^(accD=B%EaBkU* z5sb0831hezER`5;HbUhlC}Bu)afjGEU)ws-`UKsHa~jehkKkNPByX$S^Z%NQrEA@( z7KLY;n7BNSFu!?>xSY#mZILm*2`t=GeoJ)n3{gTG2()n#%wa5bm<|}Q2wUtU8{aUJ z7TdZ*KS>4wzwh0vXq?M8;C*)bM{fUX;{2Tsgm%gk!IQR}NsMqMTpYHPKVdh{`n3ga zv|vi(Zkf)Qf4TH|CE=ft{CpM+sv7tI0!d;~mvuR)uGQCe=o{K4(O(Y+jKg}|QU?r1 zdV%KJIcfPEImaUL4zgL0wSA55&S!Eau&=9$X`&=B-=ugZXH2HspzpbzAIAD0w_zJtpG>zl>I6IaGx)wh_Bahnv1@t=DQ+RnG3B4$ph@>(GZxb;e{ z7t>=&q&WQUCt!JUr<_{knUR0hgm}aCq@pW+RsEi?xa)7i0jUh%{{VlypFy}HY)>MT zU(U(&#FgG`#`L3>u$Yp@C4tNa9r3?s*}p`hQLW@12Eh&H<hAD5+v0G;xJa3s0l-HYy@sPmFAniOLPD zM&AFPdB||cwhP@)A2-<71sE;1H4OeMBtD4+^94S4aP20c+g@3tS=c~&N=V6vAfpH| z_zo$;xF}stEP%;URmW)!Cb`8#FkmERD;=%W;w2mX=8&tld{F5OB}`87vr}gw1C1gL zy!^ee?U#h1*2mgJ{tTVd4>${YsY@t<<9@XXCb57h9KDk6h$!c zL3%eo`HWX3czFET9LOmQgM^z1G)!u?%j%wv5Hdp-A9(c< z;U8duDKdKRE{7jd(~p2Zwi(01r@e{tB!(H?V#;jl&sG|L>k zM4^?`b%w;iOvbNSLXhLu#XmkDDsAv>DZ{&PHi2;0ARYPQ=$yFNkxnuf)*u&~>!7>M zm$1H1t_|YvRKxIZWa4a`MkA(m_>a^@7S}06?75ks-3Et<{Bkx1kO5V`drdr zMM0?sMoMe+$k5F*h)=h&EWp_e2vHveIa3A`_Sv`n<+cC7^Gr|jz6(S1NT!tYrc6jL9&RF@+aLU`H)l;zDyE&qoE%bF zRw`!5x0n@FQB5oemIYz*ztKrX82%R1f7^V3%?l;-F6(DhlWBcYa6qaxcp~(Nam^cZ z@upkidYa?_K97c6zG)wc8L}P^F~;9pn(FZmeAF!p$ez-^lr#$y#Jkpn9*$!B)-_y+ zzVVXr&{P{h$EaXc)T`;h_>Zned6Y5_&X)2*77`Rm9>#8DvNc?H(1mGU;A2zrfIfB) z`)DFdoO&bT?m+mdk zj2#eFl&^76?V;4Azq7C6AF|XQ&@UeUOD$nLd-NdpJ$p`SF4iKzf+&tTd*ws>TlwLS zaj8#}17_au9RHFu?x&)6yZXP>B3i#pyQJQp#UEu%ZqbjR3k&NZS3hT0v}VfsRA5bw zEbyrm&}y6iUc=_k_abT}2dG2kFP`wLxUrx_z&ta|!n^ve`Of%5>83v=Ob?yoQIwpT#ie>kBcmyk@9YQcF2B^C+&Xu>jl z_Qb?T>L+biyw%>@QQIW_@@_AFsk?s)Qkl|xxHPAr8d-TIkNuxsGhokOcBb40(>Zep zBv7HI8>mRZ@GtkmVeE!^T*C#PDO-x+x!ERcJzuCR3@IG&`%8U(J5wHjeC^B*_@i_) zs`WysJl-2Nc>QJEKkIlO4V~&DI54CcWvqNv@rUTl&MbzH#9Wu{eRbT??;ov-=tO~a zgI-d8u5q0f-~Y8)nF@4ow*U@(RtWQW`V2<0gMXdqsGvsS$A_RA&bmbSAAvKqI=W{z zo3qotO=ey3WL~xTT;l!RKSY$i-D;M05HILRk2Z1PO ztS(qGmf`0QBhVD@Q_>Q4694p1VAtn|zOmzlGw28aebUMgeJB1sB>89Yf%rOZ~24v8(RvBltk~EYqJ*=qW+nSq+tF{u^Zf5votf%9zrXtQ9EK z;*8#a-@x|#Eq1iX%%6b&>7b~Ab$0w^CSp7^<%&;<n1Fc5D>?VE7~^7~}9C z@&4~xQxGeT*=YY6GAu7{Z2@qRMRO4%C^Cf7iaN|bheM+?`m&ur5Xw;4gOvdAy~1{*gw1c@16Z?X<=juxusPAHi$tL`V8Nda2$I;1NM>Dl=N@!o?7Z zsBD?A`DDwRK*x(;O`GXh&?*O_Mda~f(hZ;*Wf_8{T>o%1^XK z+3yVCqMzi0vLa*YdZcnXob!RtpxG*iWRmw6Q~qe?y`yHQfbX*Q03)F@{_EF2 zEK#z63G=H(QPbZYLKS5!^!2Ozlb8O;yMIs+$MVkLxIPg0{@bHgI-+NGWSz4tdx`b*A9ut_3$9O|-gl0G8+w=12o%mPz{Xz@P_ zmQeor(GbGzwg%?kmp<=BG0X+q8(W_x^zW?uFFx*l3Y!c$vyabo_(b}X=%>Z!GA&U1 zgq-z6xL&2Q`cs-o^UCeksGX90uB24hPQ2gz8<;O9r5fH^``qsFI77H&GrY)n*8Z?# z9(Ef=uYTl{oIk@WoP_HxwkA69&r~XealzxvevhUE4Yn@GZkIcl_NXm5rn+%$SjPO^7Uotdur~KaL{UGA>CHrxc z?BKnP@T$F2R>c=>y!cOf23_VY&-H~qh%2tx?3HLGNf69F^UoCcqrni)k&yob8EVE0 z^WiGh(v>2#V%+KRHpk@`)SWHY#C^jFK)JncL1ZN;qN~n>)-kDztafy(yBfufx%0xSNg|rff5TAt=Tbco?!*V- z?`!oT!g5<#pVaW3_TsWr+mGOEu*>_-SABD29v`6c2?i=L+^8MZ@u2P1sg7P36CCw9X#qy=W@+=i+Dto(8;yBc0H0;Ql}~r z94)g9{^%m95a`KFlnyD0r^BcD4|+k?Ckv2}C&yA{wr2{HYMV|B=9>t(nz|WDt~u}} z)Z&EfMUdvW{v9@ti_MrLCm=yFj|@&t1-k@gH78>fi%M6IPTgiZk!#cSXw2hMU8g~ zb?&krlO)j`uP8$7O4V(78;rkHRVPe^SVaGy3prAHZqO(c3@dYi2-sNvoxZO8RbgF9 z>b1lL_}hDaiY24qVhgCx z2KLW!l0Zxfzt&!u#qrwQ*Q?yqGPudfNK7UWiXEiWbn=;L6$Rq{DrLINhIo}cR?A-# z4~C2gIvNY_=5rPrInMk6y~E#CxpU2C5;Z$#2#3&TvHv=zp6G95ju2=iwW=X8{$>p( z9`Mkg)(k3T_J01D!0D6n-71yOTGNQsz#sCcR;Y#YcB?q8C58bHlb3W|H{zAsYmlMw z!ZJ+$8Hg`^Dc03s%y~{o4kT{KM+ncC%=Vh@*vBR%CUdO_{_zf=2Vj(RiD9ATY75~f zz~H9BgzJ<{4VE^4uL)8dF%e~4oY^uSa@v$TiR=p^9Hhgp+* zJuTVsp1m6Sp4tbGVv56Kj|A1FDnMIC6K*>e@lCj7P$!uKyC%#8Z{X4lev0=&mFz6w z=kb8t7weGh8>B z#j)vIx1>XR@zSF7`l1^I{E&`;_I424;Gps$f;nl)j%aa_UkP5|LE? zI^Quig$sV3f#F~d*-F2gU{l8gK`mSSX<5?w9mVS`R9V~CW4A2icDaAU!?yMD z&h|!#lXT z+HGHPQ5#|?p#4O89RlGpG8)Zm^G+J^mPw!|1@$G>&ZWJn!kkWc?fYau*}?C32u&F2 zZUSI11%1b(45&9jl5E?!q$-3%#DmKu{Na?9LKwBLnHXxNbRbAu%-cJqUK%{|5$|-R zm39ubaY0nZH?R_2>Z>Q75KaO4yx_?2*$G$6!W&9Nx1IEYepXstC`Fw3E+R$$v+(gx z1)}eIAHJ0l-R9-@9iq1et;=Zlirso{){bmyX&h|~Jt3*nlLKfvi6!148D$P?73C z>mUq8)%h!R{w@`{GQNCl|z^7tltQT|>f(B~D*s_Ss}plFTQSgG%=!0^qFD_zeYRiHvQau51fm^`LcYA8qVyjqWDXreB z{QTdRTRoG_!2xjT@HTj@5lV89_Ci* z@51aJAnhy?H*LmL3nTuj;fe9_;@l=TTsk-d@0ay{z-=eyrr*RPAlE+>DBswzOxqcY z!Zc9si1g`83oI!(#1-Bpxe2H>J*JyCW-Hz7B$iVbkv`_y96aW}Vl#qqrk1zoGHya! zg)6w_Roz}=XvuxCQW;&56n}afaWo5~yQX>1d%vTm`JrBksSqey2ExMN1}2YallEh5 z;Yku0*l%0y(nQF!X2`PR$!__S-&#ukF3+XZ;X|zBavgn!xEwf<$*p^B*Oo{+39OlJ zv%LzW*DdlypO za5`gy!+LNsnOpaGFWgg4WuEP$Z=nx&y&HXfc9-V9NWIop zX`~;@_y~SCmfIjfD3a!9v3tL9Lw71^G5hMp^{w0w%dAY+p)XxwP3g)sat2kMAhHB@ zthgV9CTDZ>!48Ka{8A?1#43bzB!o|3GmlhY%^fN|8fuq%zN=(7M+1v231ENU`GygL z(-Yj;aUIC2CeG_?Y@0YnnK1vT@=k)40T0Jozap0 zJ-|<2{jL0*{T^24A`?W|_Gh_H%8I?kvePV<2J(CrR5K^_2UKzNVxskv4g1P;qzUfC zCSFM#-#@5JHzruy@7B zUL9`@7&mVUJ+ldu`7dzGvEUnT5Bl)&QkP!UCzZ2u(bIxM(YYqUmC90CP^fODUa99` z(HDCFMiK7`Sudv$7o>7(<|iRsDHGsjh8xP_mF2w6_aX0=Y^;ruQ;%r~ROM5gEB$#c zIB)mUKw`=KoL|D|S?P}w-5+l)><;9NJ1G}Vgbzvz53Z`+ptB;e01@&Ll8eXHv6jO_ zUX{(!U-B@DEW<7q~HTN**fuvx@RFR7z zoMivdH%i!jl$qWkwwn6g&LC@=JLEHLhyt_?n(qpD3SB+-ePq!ywfIdJ^#X}XUm1x| z<2?pT)I>5JT&o-b`3N$;WIW}hU!TA{=C0-6wh_mH!kXlry@pO}Jd7I_;kmYkxtsch zGm7u%d7F~HdRT+0T1faSZO3Ac!-Ha-w^&|+{Ysu?usZxA6@|GHmdhj=ufHXiQzV0e z4+MQ56a4|}6e;M4P57|0I?g^N{2VcR(0&Zwv{2^35dBMdhu+b|{NyP)fEZ?-Z?kL# zdJ{Cl=xN*}11y9JTvgeWKqCL6xHHD;9Gi?R=WcdC@Ff*#)-b~foy z!Z~s{i1fxa#$j!C*t24`8zB;Y4f*XY9b$rGDMcWDi+tZk z5FYtOFp_Bvn&0^F8=0c9_O0sIhd$bQ1(f#7jZ&ynTS~#~Vz5oFO^*W1jhsSo6U@M+ zHx)TbC@QTQlE7$x>%QM3a1Ji$1LIATk0Or2`vVYLSPQByN&SnXgbEUt%yR6T9X8tN z*drx(p8y383dLzFjDqT&5Md5go({q0f}uG)IdPR)H|C81_Hf?8w1U$BN$(Zj=}y3G z)1a_&ie2|*GDQ}k+Q#2Xrw0nS4WB45F<(@;ZL1lmMA3=cUbV8E`*HnKy2VoNk3tDV zY91;Q4c&j;5Xx8c>_YkjD#lRMoB_g{7vV(ghNNnf%ZCAcqi;bY;~=b@V^LfFnz$su&VOKEQPZcu@ z>}{^XVXIa=iFdM6%#cbLWbY>k3~}f*WcGHw?dMsC{Y*}%Eg&!~Rl(o@lTEk6A9Jpn zVZJHvLrRR9LfbFG%M{#$9($pyZ

%XVqzo7zM~_6CT5F-ZNOH+Ly`Ya1=D16;d2# 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

(M6Ywze<z9T*K8Dz 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 V7%I=)d8c=^j4-ma)cb=_0011*sUH9U literal 0 HcmV?d00001 diff --git a/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp b/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp new file mode 100644 index 0000000000000000000000000000000000000000..19acf3fa606f2498f182f56c1b070620221f0b74 GIT binary patch literal 25904 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 ZAB#8;od*&bfC=**RzLs%0000000904Yo!1H literal 0 HcmV?d00001 diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 4f7264c713..8f87663eaf 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -87,8 +87,20 @@ Add three new services to the bottom of `docker-compose.yaml` before the `volume Configure Prometheus https://prometheus.io/docs/prometheus/latest/configuration/configuration. +Menu -> Status -> Targets +http://localhost:9090/targets +![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp) +Menu -> Status -> TSDB Status +(http://localhost:9090/tsdb-status) + +![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusMetrics.webp) + +Menu -> Graph +(http://localhost:9090/graph?g0.expr=HikariPool_1_pool_Usage&g0.tab=0&g0.display_mode=lines&g0.show_exemplars=0&g0.range_input=15m&g0.end_input=2024-09-10%2011%3A11%3A02&g0.moment_input=2024-09-10%2011%3A11%3A02) + +![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp) ## Send Custom FusionAuth Metrics To The Elasticsearch API From 82f06c5a3d8be90773ea667e1a3235641917c2d5 Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Tue, 10 Sep 2024 15:04:45 +0200 Subject: [PATCH 05/33] use prometheus with curl --- .../secure-and-monitor/prometheus2.mdx | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 8f87663eaf..470e5ae79d 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -85,6 +85,33 @@ cd light Add three new services to the bottom of `docker-compose.yaml` before the `volumes:` section, with the code below. You are using the Docker images from Docker Hub for [Prometheus](https://hub.docker.com/r/ubuntu/prometheus), Loki, and Grafana. +The metrics FA exposes to Prometheus change over time. There are some basic Java Virtual Machine (JVM) metrics listed [here](https://fusionauth.io/docs/apis/system#retrieve-system-metrics-using-prometheus). To see exactly what is available on your instance of FusionAuth, run the command below. + +```sh +curl -u "apikey:33052c8a-c283-4e96-9d2a-eb1215c69f8f-not-for-prod" 0.0.0.0:9011/api/prometheus/metrics + +# Output: + +# HELP HikariPool_1_pool_MinConnections Generated from Dropwizard metric import (metric=HikariPool-1.pool.MinConnections, type=com.zaxxer.hikari.metrics.dropwizard.CodaHaleMetricsTracker$$Lambda$292/0x0000000100449e40) +# TYPE HikariPool_1_pool_MinConnections gauge +HikariPool_1_pool_MinConnections 10.0 +# HELP jvm_memory_heap_committed Generated from Dropwizard metric import (metric=jvm.memory.heap.committed, type=com.codahale.metrics.jvm.MemoryUsageGaugeSet$8) +# TYPE jvm_memory_heap_committed gauge +jvm_memory_heap_committed 5.36870912E8 +# HELP prime_mvc___api_key_generate__requests Generated from Dropwizard metric import (metric=prime-mvc.[/api/key/generate].requests, type=com.codahale.metrics.Timer) +# TYPE prime_mvc___api_key_generate__requests summary +prime_mvc___api_key_generate__requests{quantile="0.5",} 0.2392109 +prime_mvc___api_key_generate__requests{quantile="0.75",} 0.2392109 +prime_mvc___api_key_generate__requests{quantile="0.95",} 0.2392109 +prime_mvc___api_key_generate__requests{quantile="0.98",} 0.2392109 +prime_mvc___api_key_generate__requests{quantile="0.99",} 0.2392109 +prime_mvc___api_key_generate__requests{quantile="0.999",} 0.2392109 +prime_mvc___api_key_generate__requests_count 1.0 +... +``` + +If you get no response, add `-v` to the command to see what error occurs. If you see `401`, it is likely that your API key is incorrect. + Configure Prometheus https://prometheus.io/docs/prometheus/latest/configuration/configuration. Menu -> Status -> Targets @@ -102,6 +129,10 @@ Menu -> Graph ![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp) +## Send Alerts To ntfy.sh + + + ## Send Custom FusionAuth Metrics To The Elasticsearch API ### Which Metrics To Monitor @@ -161,8 +192,10 @@ Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alert - [Monitoring overview](/docs/operate/secure-and-monitor/monitor) - [FusionAuth metrics](/docs/operate/secure-and-monitor/monitor#metrics) +- [FusionAuth Prometheus API](https://fusionauth.io/docs/apis/system#retrieve-system-metrics-using-prometheus) - [Prometheus](https://prometheus.io/docs/introduction/overview) - [Loki](https://grafana.com/oss/loki) - [Grafana](https://grafana.com/grafana) - [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) -- [Ubuntu Prometheus Container](https://hub.docker.com/r/ubuntu/prometheus) \ No newline at end of file +- [Ubuntu Prometheus Container](https://hub.docker.com/r/ubuntu/prometheus) +- \ No newline at end of file From 25935038bb173c3c94d4384a2da550b22edeb71f Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Tue, 10 Sep 2024 15:52:44 +0200 Subject: [PATCH 06/33] explain notify --- .../secure-and-monitor/prometheus2.mdx | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 470e5ae79d..02bfec62c7 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -122,6 +122,8 @@ http://localhost:9090/targets Menu -> Status -> TSDB Status (http://localhost:9090/tsdb-status) +TSDB is a time-series database. + ![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusMetrics.webp) Menu -> Graph @@ -129,8 +131,30 @@ Menu -> Graph ![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp) + +

+ ## Send Alerts To ntfy.sh +Let's set up a service to notify you whenever errors occur in FusionAuth. To do this, you'll check if the counter `prime_mvc_____errors_total` has increased in the last minute. If it has, then FusionAuth will send a message to a channel that your company can monitor. + +This channel could be Discord, Slack, email, or SMS. But the simplest and cheapest alert service is [ntfy.sh](https://ntfy.sh/). It's free, but all channels are public, so don't broadcast secrets. + +To see how it works, run the command below in a terminal. + +```sh +curl -H "Title: Error" -d "A FusionAuth error occured in the last minute" ntfy.sh/fusionauthprometheus +``` + +Browse to the channel to be notified of errors at https://ntfy.sh/fusionauthprometheus. + +Now let's configure Prometheus to do this. + +TODO https://prometheus.io/docs/alerting/latest/overview/ + +`increase(prime_mvc_____errors_total[1m])` ## Send Custom FusionAuth Metrics To The Elasticsearch API From 897a82e6bd623194c0630583902a96282a03622f Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Wed, 11 Sep 2024 13:03:47 +0200 Subject: [PATCH 07/33] include webhook sites in monitor article --- .../content/docs/operate/secure-and-monitor/monitor.mdx | 7 ++++--- .../docs/operate/secure-and-monitor/prometheus2.mdx | 8 +++++++- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/astro/src/content/docs/operate/secure-and-monitor/monitor.mdx b/astro/src/content/docs/operate/secure-and-monitor/monitor.mdx index a2299bd42a..a4b5619c5c 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/monitor.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/monitor.mdx @@ -11,7 +11,7 @@ import LoadTestingTips from 'src/content/docs/get-started/run-in-the-cloud/_load ## Overview -Once you've installed FusionAuth and your applications use it for authentication, you'll want to ensure FusionAuth remains online and operational. An ecosystem of tools, protocols, and paid services are available to monitor applications and provide telemetry (remote measurement) to help you maintain FusionAuth's availability and performance. +Once you've installed FusionAuth and your applications use it for authentication, you'll want to ensure FusionAuth remains online and operational. An ecosystem of tools, protocols, and paid services are available to monitor applications and provide telemetry (remote measurement) to help you maintain FusionAuth's availability and performance. This overview article will introduce you to various metrics (measurements) you can extract from FusionAuth and common monitoring tools to process, store, and visualize them. @@ -116,7 +116,7 @@ Read the [guide to monitoring FusionAuth with OpenTelemetry](/docs/operate/secur ### What Is Prometheus? -[Prometheus](https://prometheus.io/docs/introduction/overview) is a monitoring and alerting toolkit with a built-in time series database designed to efficiently store metrics and provide data through a custom query language. Prometheus offers instrumentation tools to collect metrics from networks, machines, and some [programming languages](https://prometheus.io/docs/instrumenting/clientlibs/). While Prometheus includes basic charting capabilities, more advanced dashboards require integration with Grafana. You can use the Prometheus [Alertmanager](https://github.com/prometheus/alertmanager) to handle alerts. +[Prometheus](https://prometheus.io/docs/introduction/overview) is a monitoring and alerting toolkit with a built-in time series database designed to efficiently store metrics and provide data through a custom query language. Prometheus offers instrumentation tools to collect metrics from networks, machines, and some [programming languages](https://prometheus.io/docs/instrumenting/clientlibs/). While Prometheus includes basic charting capabilities, more advanced dashboards require integration with Grafana. You can use the Prometheus [Alertmanager](https://github.com/prometheus/alertmanager) to handle alerts. Prometheus can be used for all activities in the monitoring chain, though some at a very basic level, but should [not be used to store logs](https://prometheus.io/docs/introduction/faq/#how-to-feed-logs-into-prometheus). @@ -162,6 +162,7 @@ Some of the monitoring components discussed in the previous sections can alert s - Email: You will probably need to subscribe to a mail sender service to receive email alerts, unless your internet provider allows you access to the SMTP protocol. - Computer chat apps: Computer chat apps like Slack and Discord can receive alert messages in a specific channel for free. Slack and Discord clients can be installed on your phone to be sure you never miss an alert. +- Public notification web apps: There are public websites, like https://ntfy.sh and https://webhook.site that allow anyone to send messages to named channels for free. Ntfy also has a mobile app that will notify you when a channel receives a message. Since these services are public, you should never send secrets to them. - Phone chat apps: For example, WhatsApp and Threema. WhatsApp requires a phone number to sign up. Threema does not need a phone number but requires you to buy the mobile app for a small one-time fee. Both services charge a fee for businesses to send messages to users. Grafana's OnCall tool consolidates and redirects multiple alerts from various systems. This might be a good option for you if you have support staff that monitor an alert system in shifts rather than wait to receive an email. @@ -188,7 +189,7 @@ Remember that Prometheus, Loki, and Grafana all work together, in the same way a | Prometheus | Yes | Yes | Yes | Yes | Yes (Alertmanager) | No | | Grafana | No | No | No | Yes | Yes (OnCall) | No | | Loki (logs only) | No | Yes | Yes | No | No | No | -| Email, Slack, Discord, WhatsApp, Threema | No | No | No | No | No | Yes | +| Email, Slack, Discord, WhatsApp, Threema, Webhook.site, ntfy.sh | No | No | No | No | No | Yes | There are other paid and hosted monitoring services that aren't discussed in this article, like Splunk (integration guide with FusionAuth [here](/docs/operate/secure-and-monitor/splunk)) and DataDog, which have their own tools and typically implement the OpenTelemetry Protocol. diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 02bfec62c7..e6dbf37d5d 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -152,10 +152,15 @@ Browse to the channel to be notified of errors at https://ntfy.sh/fusionauthprom Now let's configure Prometheus to do this. -TODO https://prometheus.io/docs/alerting/latest/overview/ +The Prometheus documentation doesn't say it explicitly, but the Prometheus AlertManager is **not** included with Prometheus. You need to run AlertManager separately. Again, you'll use the [Ubuntu Docker container](https://hub.docker.com/r/ubuntu/alertmanager). This container has a `/prometheus` directory, but the container doesn't run Prometheus. + + `increase(prime_mvc_____errors_total[1m])` +```sh +docker exec -it faProm /bin/bash +``` ## Send Custom FusionAuth Metrics To The Elasticsearch API @@ -218,6 +223,7 @@ Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alert - [FusionAuth metrics](/docs/operate/secure-and-monitor/monitor#metrics) - [FusionAuth Prometheus API](https://fusionauth.io/docs/apis/system#retrieve-system-metrics-using-prometheus) - [Prometheus](https://prometheus.io/docs/introduction/overview) +- [Prometheus alerts](https://prometheus.io/docs/alerting/latest/overview/) - [Loki](https://grafana.com/oss/loki) - [Grafana](https://grafana.com/grafana) - [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) From 284dc0aebae9bd7576057f0cd4b377eb4c877f54 Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Thu, 12 Sep 2024 12:32:09 +0200 Subject: [PATCH 08/33] got alertmanager to work --- .../prometheus/prometheusAlert.webp | Bin 0 -> 16186 bytes .../prometheus/prometheusNtfy.webp | Bin 0 -> 48354 bytes .../secure-and-monitor/prometheus2.mdx | 44 ++++++++++++++++-- 3 files changed, 40 insertions(+), 4 deletions(-) create mode 100644 astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusAlert.webp create mode 100644 astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusNtfy.webp diff --git a/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusAlert.webp b/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusAlert.webp new file mode 100644 index 0000000000000000000000000000000000000000..65c21e55970d96bc4df0a0e0469d8c7f2c462fcd GIT binary patch literal 16186 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 literal 0 HcmV?d00001 diff --git a/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusNtfy.webp b/astro/public/img/docs/operate/secure-and-monitor/prometheus/prometheusNtfy.webp new file mode 100644 index 0000000000000000000000000000000000000000..e95c9aca7c4d217a77e21c4e3cc2f6d6494fe733 GIT binary patch literal 48354 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 literal 0 HcmV?d00001 diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index e6dbf37d5d..6ab7a81eab 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -48,6 +48,8 @@ graph LR This diagram shows three components that could die and need monitoring: the PostgreSQL database, FusionAuth, and your app (web server) that directs users to FusionAuth for login. In this guide, you will monitor only FusionAuth and PostgreSQL, but you can use similar techniques to monitor your app. +In this guide you will add Prometheus to monitor your FusionAuth instance. It will poll FusionAuth every fifteen seconds to see if any errors have occured. + ```mermaid graph LR D(User) @@ -69,7 +71,7 @@ graph LR D --> C C --> G F --> C - C --> |Prometheus pulls metrics from FusionAuth| E + E --> |Prometheus pulls metrics from FusionAuth| C style I fill:#999 style E fill:#944 ``` @@ -83,7 +85,11 @@ git clone https://github.com/FusionAuth/fusionauth-example-docker-compose.git cd light ``` -Add three new services to the bottom of `docker-compose.yaml` before the `volumes:` section, with the code below. You are using the Docker images from Docker Hub for [Prometheus](https://hub.docker.com/r/ubuntu/prometheus), Loki, and Grafana. +Add a new service to the bottom of `docker-compose.yaml` before the `volumes:` section, with the code below. You are using the Docker image from Docker Hub for [Prometheus]. + +```yaml + +``` The metrics FA exposes to Prometheus change over time. There are some basic Java Virtual Machine (JVM) metrics listed [here](https://fusionauth.io/docs/apis/system#retrieve-system-metrics-using-prometheus). To see exactly what is available on your instance of FusionAuth, run the command below. @@ -152,16 +158,43 @@ Browse to the channel to be notified of errors at https://ntfy.sh/fusionauthprom Now let's configure Prometheus to do this. -The Prometheus documentation doesn't say it explicitly, but the Prometheus AlertManager is **not** included with Prometheus. You need to run AlertManager separately. Again, you'll use the [Ubuntu Docker container](https://hub.docker.com/r/ubuntu/alertmanager). This container has a `/prometheus` directory, but the container doesn't run Prometheus. +The Prometheus documentation doesn't say it explicitly, but the Prometheus AlertManager is **not** included with Prometheus. You need to run AlertManager separately. Again, you'll use the [Ubuntu Docker container](https://hub.docker.com/r/ubuntu/alertmanager). This container has a `/etc/prometheus` directory, but the container doesn't run Prometheus. +

`increase(prime_mvc_____errors_total[1m])` ```sh docker exec -it faProm /bin/bash + +promtool check config /etc/prometheus/prometheus.yml + + +docker exec -it faAlert /bin/bash + +exit + +docker compose up alertmanager + + +#test alert manager manually +curl -X POST -H "Content-Type: application/json" -d '[{"labels":{"alertname":"TestAlert"}}]' http://localhost:9093/api/v2/alerts + + +in reality you want: + +increase(prime_mvc_____errors_total[1m]) > 0 ``` +## TODO + +custom metrics +loki +grafana + ## Send Custom FusionAuth Metrics To The Elasticsearch API ### Which Metrics To Monitor @@ -228,4 +261,7 @@ Now that you can monitor FusionAuth in Elastic, you should enable Elastic [alert - [Grafana](https://grafana.com/grafana) - [Grafana Cloud](https://grafana.com/auth/sign-up/create-user) - [Ubuntu Prometheus Container](https://hub.docker.com/r/ubuntu/prometheus) -- \ No newline at end of file +- + +## TODO +- FA \ No newline at end of file From 636c5562920c2702bbf567ad87fd8b67abc5b096 Mon Sep 17 00:00:00 2001 From: RichardJECooke Date: Thu, 12 Sep 2024 13:52:31 +0200 Subject: [PATCH 09/33] documented prometheus and alertmanager and nfty. now for loki and grafana --- .../secure-and-monitor/prometheus2.mdx | 255 +++++++++++++++--- 1 file changed, 211 insertions(+), 44 deletions(-) diff --git a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx index 6ab7a81eab..681fb1cafe 100644 --- a/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx +++ b/astro/src/content/docs/operate/secure-and-monitor/prometheus2.mdx @@ -88,7 +88,53 @@ cd light Add a new service to the bottom of `docker-compose.yaml` before the `volumes:` section, with the code below. You are using the Docker image from Docker Hub for [Prometheus]. ```yaml + prometheus: + image: ubuntu/prometheus:2.52.0-22.04_stable + container_name: faProm + depends_on: + - fa + ports: + - 9090:9090 + volumes: + - ./prometheusConfig.yml:/etc/prometheus/prometheus.yml + - ./prometheusDb:/prometheus +``` + +This service says that PR will start after FA, that you can browse to it on port 9090, and that it will save its database and configuration file in persistent directories on your machine. + +Create the Prometheus configuration file, called `prometheusConfig.yml`, containing the content below: +```yaml +global: + evaluation_interval: 30s +scrape_configs: + - job_name: FusionAuth + scrape_interval: 15s + scheme: http + metrics_path: api/prometheus/metrics + static_configs: + - targets: ["fa:9011"] + basic_auth: + username: "apikey" + password: "33052c8a-c283-4e96-9d2a-eb1215c69f8f-not-for-prod" +``` + +This configuration says that metrics will be gathered from FA every fifteen seconds. PR will evaluate the metrics only every thirty seconds however. This evaluation triggers things like alerts (shown later). The FA kickstart configuration files created an API key that PR can use. + + + +Run everything with `docker compose up`. You should be able to log in to FusionAuth at http://localhost:9011 with email address `admin@example.com` and password `password`, and to Prometheus at http://localhost:9090. + +If you want to check that Prometheus has accepted your configuration file as valid, you can enter the container and use `promtool` to validate the YAML file. + +```sh +docker exec -it faProm /bin/bash + +promtool check config /etc/prometheus/prometheus.yml + +exit ``` The metrics FA exposes to Prometheus change over time. There are some basic Java Virtual Machine (JVM) metrics listed [here](https://fusionauth.io/docs/apis/system#retrieve-system-metrics-using-prometheus). To see exactly what is available on your instance of FusionAuth, run the command below. @@ -118,25 +164,19 @@ prime_mvc___api_key_generate__requests_count 1.0 If you get no response, add `-v` to the command to see what error occurs. If you see `401`, it is likely that your API key is incorrect. -Configure Prometheus https://prometheus.io/docs/prometheus/latest/configuration/configuration. - -Menu -> Status -> Targets -http://localhost:9090/targets +Check what metrics PR scraped from FA in the [PR web interface](http://localhost:9090/tsdb-status) by browsing to Menu -> Status -> TSDB Status (time-series database). -![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp) +![Prometheus metrics](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusMetrics.webp) -Menu -> Status -> TSDB Status -(http://localhost:9090/tsdb-status) +Check that FA is running in the [PR web interface](http://localhost:9090/targets) by browsing to Menu -> Status -> Targets. -TSDB is a time-series database. - -![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusMetrics.webp) +![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusTargets.webp) -Menu -> Graph -(http://localhost:9090/graph?g0.expr=HikariPool_1_pool_Usage&g0.tab=0&g0.display_mode=lines&g0.show_exemplars=0&g0.range_input=15m&g0.end_input=2024-09-10%2011%3A11%3A02&g0.moment_input=2024-09-10%2011%3A11%3A02) +See charts of FA metrics in the [PR web interface](http://localhost:9090/graph?g0.expr=HikariPool_1_pool_Usage&g0.tab=0&g0.display_mode=lines&g0.show_exemplars=0&g0.range_input=15m&g0.end_input=2024-09-10%2011%3A11%3A02&g0.moment_input=2024-09-10%2011%3A11%3A02) by browsing to Menu -> Graph. In the text box you can push Ctrl + Spacebar to view all metrics and functions available to you. Try entering `HikariPool_1_pool_Usage` and clicking Execute. ![Prometheus targets](../../../../../public/img/docs/operate/secure-and-monitor/prometheus/prometheusChart.webp) +To monitor all FA errors, use the expression `prime_mvc_____errors_total`.