Как контролировать веб-сервер Apache с помощью Prometheus и Grafana за 5 минут — Information Security Squad
Как контролировать веб-сервер Apache с помощью Prometheus и Grafana за 5 минут

Добро пожаловать в наш справочник о том, как контролировать веб-сервер Apache с помощью Prometheus и Grafana менее чем за 5 минут.

Эта настройка должна работать для любой версии веб-сервера Apache, работающего под любым Linux.

Шаг 1: Загрузите и установите Apache Prometheus exporter

export VER="0.5.0"
wget https://github.com/Lusitaniae/apache_exporter/releases/download/v${VER}/apache_exporter-${VER}.linux-amd64.tar.gz

Распакуйте полученный архив

tar xvf apache_exporter-${VER}.linux-amd64.tar.gz
sudo cp apache_exporter-${VER}.linux-amd64/apache_exporter /usr/local/bin

apache_exporter должен быть исполняемым из вашего текущего SHELL

$ apache_exporter -version
apache_exporter, version 0.5.0 (branch: HEAD, revision: f6a5b4814ea795ee9eac745c55649cce9e5117a9)
  build user:       root@0fdc4d8924f5
  build date:       20171113-21:19:13
  go version:       go1.9.2

Шаг 2: Создайте службу systemd Apache Prometheus exporter

Во-первых, добавьте пользователя prometheus, который будет запускать службу

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

Затем перейдите к созданию файла служебной единицы systemd.

sudo vim /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/server-status/?auto \
  --telemetry.address=0.0.0.0:9117 \
  --telemetry.endpoint=/metrics

SyslogIdentifier=apache_exporter
Restart=always

[Install]
WantedBy=multi-user.target

Служба будет прослушивать порт 9117, а показатели будут отображаться в URI/metrics.

Если показатели Apache не указаны в http://localhost/server-status/?auto, вам нужно будет изменить URL-адрес.

Для системы Init, такой как CentOS 6.x, создайте скрипт инициализации в /etc/init.d/

sudo vim /etc/init.d/apache_exporter

содержимое:

#!/bin/bash
# Author: Josphat Mutai, kiplangatmtai@gmail.com , https://github.com/jmutai
# apache_exporter     This shell script takes care of starting and stopping Prometheus apache exporter 
#
# chkconfig: 2345 80 80
# description: Prometheus apache exporter  start script
# processname: apache_exporter
# pidfile: /var/run/apache_exporter.pid

# Source function library.
. /etc/rc.d/init.d/functions

RETVAL=0
PROGNAME=apache_exporter
PROG=/usr/local/bin/${PROGNAME}
RUNAS=prometheus
LOCKFILE=/var/lock/subsys/${PROGNAME}
PIDFILE=/var/run/${PROGNAME}.pid
LOGFILE=/var/log/${PROGNAME}.log
DAEMON_SYSCONFIG=/etc/sysconfig/${PROGNAME}

# GO CPU core Limit

#GOMAXPROCS=$(grep -c ^processor /proc/cpuinfo)
GOMAXPROCS=1

# Source config

. ${DAEMON_SYSCONFIG}

start() {
    if [[ -f $PIDFILE ]] > /dev/null; then
        echo "apache_exporter  is already running"
        exit 0
    fi

    echo -n "Starting apache_exporter  service…"
    daemonize -u ${USER} -p ${PIDFILE} -l ${LOCKFILE} -a -e ${LOGFILE} -o ${LOGFILE} ${PROG} ${ARGS}
    RETVAL=$?
    echo ""
    return $RETVAL
}

stop() {
    if [ ! -f "$PIDFILE" ] || ! kill -0 $(cat "$PIDFILE"); then
        echo "Service not running"
        return 1
    fi
    echo 'Stopping service…'
    #kill -15 $(cat "$PIDFILE") && rm -f "$PIDFILE"
    killproc -p ${PIDFILE} -d 10 ${PROG}
    RETVAL=$?
    echo
    [ $RETVAL = 0 ] && rm -f ${LOCKFILE} ${PIDFILE}
    return $RETVAL
}

status() {
    if [ -f "$PIDFILE" ] || kill -0 $(cat "$PIDFILE"); then
      echo "apache exporter  service running..."
      echo "Service PID: `cat $PIDFILE`"
    else
      echo "Service not running"
    fi
     RETVAL=$?
     return $RETVAL
}

# Call function
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    status)
        status
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 2
esac

Установите пакет daemonize.

sudo yum -y install daemonize

Создать файл конфигурации Arguments

sudo vim /etc/sysconfig/apache_exporter

Добавьте

ARGS="--insecure --scrape_uri=http://localhost/server-status/?auto --telemetry.address=0.0.0.0:9117 --telemetry.endpoint=/metrics"

Протестируйте скрипт

# /etc/init.d/apache_exporter
Usage: /etc/init.d/apache_exporter {start|stop|restart}

Шаг 3. Запустите Apache Prometheus и включите службу для запуска при загрузке системы.

sudo /etc/init.d/apache_exporter start
sudo chkconfig apache_exporter on

Вы можете проверить его использование:

$ sudo /etc/init.d/apache_exporter status
apache exporter  service running...
Service PID: 1970

$ sudo chkconfig --list | grep apache_exporter
apache_exporter 0:off   1:off   2:on    3:on    4:on    5:on    6:off

$ sudo ss -tunelp | grep 9117
tcp    LISTEN     0      128                   :::9117                 :::*      users:(("apache_exporter",1970,6)) ino:1823474168 sk:ffff880341cd7800

Шаг 4: Добавить exporter задачу

Добавьте job на сервер Prometheus для определения метрик.

Измените /etc/prometheus/prometheus.yml

# Apache Servers
  - job_name: apache1
    static_configs:
      - targets: ['10.1.10.15:9117']
        labels:
          alias: server1-apache

  - job_name: apache2
    static_configs:
      - targets: ['10.1.10.16:9117']
        labels:
          alias: server2-apache

Перезапустите prometheus

sudo systemctl restart prometheus

Проверьте доступ к порту 9117 с сервера Prometheus

$ telnet 10.1.10.15 9117
Trying 10.1.10.15...
Connected to 10.1.10.15.
Escape character is '^]'.
^]

Шаг 5: добавьте Dashboard в Grafana

Последний шаг — создать свою собственную панель для визуализации метрик Apache.

Для этой демонстрации мы будем использовать Grafana Dashboards by Ricardo F.

У вас должен быть исходник данных Prometheus, уже добавленный в Grafana, или используйте ссылку Add Prometheus data source, чтобы добавить его.

После того как источник данных был добавлен, импортируйте панель Apache Grafana Dashboard, перейдя в Dashboard > Import.

Используйте 3894 для идентификатора панели Grafana.

Дайте ему описательное имя и выберите ранее добавленный источник данных Prometheus.

Нажмите кнопку «Import», чтобы начать использовать панель.

Через несколько минут показатели отобразятся.

Выберите другой узел, чтобы показать показатели для использования раскрывающегося меню в верхней части панели показателей.

В следующем руководстве по мониторингу Apache я расскажу об использовании InfluxDB и Grafana для мониторинга веб-сервера Apache.

1 комментария на “Как контролировать веб-сервер Apache с помощью Prometheus и Grafana за 5 минут

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40