PHP Error Log Exporter for Prometheus with Grafana dashboard

Questo articolo è stato scritto oltre 1 years, il contenuto potrebbe essere datato.

This is a Grafana Dashboard as example. It is an open source tool that you can install in your VPS that is an interface to various DB that create this dashboards and are easy to configure without develop.

So in my company in our VPS we have Grafana with various Prometheus exporter that now I will show to you.

First let’s talk about Prometheus. As Grafana, it is developed in Go and are of course open source like many other things in this world. Prometheus is a database that works with scrapers that you configure with an interval and some parameters. Those scrapers are web server with an endpoint with a rule at every line with this data that Prometheus will parse and import. You can configure Prometheus to keep the data the time that you prefer, in our case 2 days.

Usually those exporters are used on LAN where they can reach the various server easily without expose those pages to the internet.

Another feature of Grafana is the notification that you can configure by the specific data on various channels from emails to discord and various user access with different permissions.

I implemented 4 exporters (and 2 are by us for our needs, one from the title).

PageSpeed Exporter

Do you need to track the Google PageSpeed metrics? Now you can with this exporter in Go that you need to compile. We are running without Docker like the others just because we have various things in this VPS. Ideally is better to have a VPS just for that but it isn’t so resource heavy.

You can configure it as you can see for various websites and create different dashboard to let access to specific user groups.

Prometheus Metrics in WordPress

This is an example of exporters in PHP, it is a WordPress plugin by me that export various stuff for Prometheus.

To block the access use a token that you need to configure in WP and in the Prometheus parameters.

SSLLabs Exporter

Do you want to check if your website is ok with certificates? Let’s check with this exporter in Go that you need to compile. It uses the SSLlabs API to check also various things.

PHP Error Log Exporter

This one is a fork by me updated with the latest Go and Prometheus libraries as the original is abandoned since 2016.

In this case require the name of the site and the path of the PHP error log to parse. Support various files to parse and it was the first time that I work with Go.

Anyway find the 5 type of PHP errors and show on a graph (in Grafana).

Alerts

As now in Grafana you can get Alerts but only in Graph fields type (the widgets above) as you can have Gauge/Stats etc.

Just remember to disable in the Alert the OK notification or you will get a lot of them.

User groups access

You can have an access for your customers to the  dashboard that you want. In this way if they care they can monitor what they need and if they want you can configure the alerts for them.

Reverse proxy

As default Grafana use 3000 as port so with Apache on Nginx you can do a reverse proxy to block that port and remap to a specific url.

Block ports

iptables -A INPUT -p tcp -s localhost --dport 9090 -j ACCEPT
iptables -A INPUT -p tcp --dport 9090 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 9271 -j ACCEPT
iptables -A INPUT -p tcp --dport 9271 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 9100 -j ACCEPT
iptables -A INPUT -p tcp --dport 9100 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 19215 -j ACCEPT
iptables -A INPUT -p tcp --dport 19215 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 3000 -j ACCEPT
iptables -A INPUT -p tcp --dport 3000 -j DROP
iptables -A INPUT -p tcp -s localhost --dport 9423 -j ACCEPT
iptables -A INPUT -p tcp --dport 9423 -j DROP

In this way you block the various ports of the exporter, 9090 is Prometheus and 3000 is Grafana.

You can configure your SSH to port local forwarding when you access it, in this way you can see those ports if you need them locally.

Host domain.tld
  LocalForward 9090 localhost:9090
  LocalForward 9271 localhost:9271
  LocalForward 9217 localhost:9217
  LocalForward 9243 localhost:9243
  LocalForward 9100 localhost:9100

Bye!

Liked it? Take a second to support Mte90 on Patreon!
Become a patron at Patreon!

Leave a Reply

Your email address will not be published. Required fields are marked *