Friday 13 August 2021

Dashboard Monitoring Apache Server, php-fpm & MySQL

 mod_status

/etc/apache2/sites-available/status.conf

Listen 8181

<VirtualHost *:8181>

    ServerName my-domain-name.id

    ErrorLog /var/log/apache2/status_error.log

    CustomLog /var/log/apache2/status_access.log common

    <Location /server-status>

        SetHandler server-status

        Require all granted

    </Location>

</VirtualHost>

apache Exporter untuk Prometheus (Lusitaniae)

 /etc/systemd/system/apache_exporter.service


[Unit]

Description=Prometheus

Documentation=https://github.com/Lusitaniae/apache_exporter

Wants=network-online.target

After=network-online.target


[Service]

Type=simple

User=prometheus

Group=prometheus

ExecReload=/bin/kill -HUP $MAINPID

ExecStart=/usr/local/bin/apache_exporter \

  --insecure \

  --scrape_uri=http://localhost:8181/server-status/?auto \

  --telemetry.address=0.0.0.0:9117 \

  --telemetry.endpoint=/metrics


SyslogIdentifier=apache_exporter

Restart=always


[Install]

WantedBy=multi-user.target

1. php-fpm Exporter untuk Prometheus (Lusitaniae)

/etc/php/7.2/fpm/pool.d/www.conf

pm.status_path = /status-phpfpm72

sudo apt install golang-go

git clone https://github.com/Lusitaniae/phpfpm_exporter.git

cd phpfpm_exporter

make build

/etc/systemd/system/php-fpm_exporter.service

[Unit]

Description = PHP-FPM Prometheus Exporter

Documentation=https://github.com/Lusitaniae/phpfpm_exporter

Wants=network-online.target

After=network-online.target


[Service]

ExecReload=/bin/kill -HUP $MAINPID

SyslogIdentifier = phpfpm_exporter

ExecStart = /opt/phpfpm_exporter/phpfpm_exporter \

   --phpfpm.socket-paths /var/run/php/php7.2-fpm.sock \

   --phpfpm.status-path="/status-phpfpm72"

   --phpfpm.script-collector-paths /usr/local/bin/php_exporter/phpfpm_opcache_exporter.php


[Install]

WantedBy = multi-user.target

systemctl daemon-reload

systemctl enable --now php-fpm_exporter

systemctl status php-fpm_exporter

 

2. php-fpm Exporter untuk Prometheus (hipages)

Dapat juga menggunakan exporter berikut : https://github.com/hipages/php-fpm_exporter

 

nano /etc/systemd/system/php-fpm_exporter.service

[Unit]
Description = PHP-FPM Prometheus Exporter
Documentation=https://github.com/Lusitaniae/phpfpm_exporter
Wants=network-online.target
After=network-online.target


[Service]
ExecReload=/bin/kill -HUP $MAINPID
SyslogIdentifier = phpfpm_exporter

ExecStart = /usr/local/bin/phpfpm_exporter/php-fpm_exporter_2.2.0_linux_amd64 server --web.listen-address 127.0.0.1:9253 --phpfpm.scrape-uri tcp://127.0.0.1:9000/status  --phpfpm.fix-process-count true

[Install]
WantedBy = multi-user.target

MySQL

[9][10]. Untuk Grafana dashboard, dapat menggunakan id 6239

Prometheus

Install dan mengamankan prometheus yang secara default dapat diakses tanpa password di port 9090, baca [6].

/etc/prometheus/prometheus.yml

# my global config

global:

  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.

  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

  # scrape_timeout is set to the global default (10s).


# Alertmanager configuration

alerting:

  alertmanagers:

    - static_configs:

        - targets:

          # - alertmanager:9093


# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.

rule_files:

  # - "first_rules.yml"

  # - "second_rules.yml"


# A scrape configuration containing exactly one endpoint to scrape:

# Here it's Prometheus itself.

scrape_configs:

  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.

  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'

    # scheme defaults to 'http'.

    static_configs:

      - targets: ["localhost:9090"]

  # Apache Servers

  - job_name: "apache"

    static_configs:

      - targets: ["localhost:9117"]

  # php-fpm

  - job_name: "php-fpm7.2"

    static_configs:

      - targets: ["localhost:9253"]

Referensi

  1. Apache Exporter for Prometheus, https://github.com/Lusitaniae/apache_exporter
  2. Install Prometheus on Debian 10, https://kifarunix.com/install-prometheus-on-debian-10/
  3. Monitor Apache Web Server with Prometheus and Grafana in 5 minutes, https://computingforgeeks.com/how-to-monitor-apache-web-server-with-prometheus-and-grafana-in-5-minutes/
  4. Grafana support for prometheus, https://prometheus.io/docs/visualization/grafana/
  5. PHP-FPM Exporter for Prometheus, https://github.com/Lusitaniae/phpfpm_exporter
  6. Securing Prometheus API and UI endpoints using basic auth, https://prometheus.io/docs/guides/basic-auth/
  7. Real-time PHP-FPM Status, https://gist.github.com/Jiab77/a9428050ab9bb3f17c5e33343da94fd8
  8. Prometheus Server and TLS, https://inuits.eu/blog/prometheus-server-tls/
  9. How to Monitor MySQL Deployments with Prometheus & Grafana at ScaleGrid, https://scalegrid.io/blog/how-to-monitor-mysql-deployments-with-prometheus-and-grafana-at-scalegrid/
  10. MySQL Server Exporter, https://github.com/prometheus/mysqld_exporter

Composer : A Dependency Manager for PHP

 ...

Referensi

  1. Composer : A Dependency Manager for PHP, https://getcomposer.org
  2. Introducing graph visualization of composer package dependencies, https://clue.engineering/2020/introducing-graph-composer