Мониторинг php-fpm с помощью New Relic Plugin Agent

Jan 26, 2017 21:05 · 580 words · 3 minute read new relic monitoring php-fpm

Ранее мы уже упоминали о системе мониторинга New Relic, однако рассматривали пример лишь с мониторингом базовых сервисов. Давайте разберемся, как собирать и выводить метрики от php-fpm!

Для мониторинга некоторых специальных сервисов можно использовать New Relic Plugin Agent. К таким сервисам относятся:

  • Alternative PHP Cache;
  • Apache HTTP Server;
  • CouchDB;
  • Elasticsearch;
  • HAProxy;
  • Memcached;
  • MongoDB;
  • Nginx;
  • pgBouncer;
  • PHP FPM;
  • PostgreSQL;
  • RabbitMQ;
  • Redis;
  • Riak;
  • uWSGI.

Как видим, в этом списке присутствует php-fpm — то, что нам нужно! Устанавливаем агент следующей командой:

pip install newrelic-plugin-agent

Создаем необходимые для работы агента каталоги:

mkdir -p /var/log/newrelic
mkdir -p /var/run/newrelic

Примечание. Пользователь, определенный в конфигурационном файле, должен иметь право записи в это каталоги.

Копируем пример конфигурационного файла агента в каталог /etc/newrelic/:

cp /opt/newrelic-plugin-agent/newrelic-plugin-agent.cfg /etc/newrelic/newrelic-plugin-agent.cfg

И изменяем под свои нужды — вводим лицензионный ключ и определяем сервисы, которые нужно мониторить. В мое случае конфиг выглядит так:

%YAML 1.2
---
Application:
  license_key: ed36507db6a10fb33429637793735933e9a477aa
  wake_interval: 60
 
  nginx:
    name: web1.employer.cz
    scheme: http
    host: 127.0.0.1
    port: 80
    verify_ssl_cert: true
    path: /nginx_status
 
  php_fpm:
    - name: letsclearitup
      scheme: https
      host: letsclearitup.com.ua
      port: 443
      path: /status
      query: json
    - name: animania
      scheme: http
      host: animania.dp.ua
      port: 80
      path: /status
      query: json
 
Daemon:
  user: newrelic
  pidfile: /var/run/newrelic/newrelic-plugin-agent.pid
 
Logging:
  formatters:
    verbose:
      format: '%(levelname) -10s %(asctime)s %(process)-6d %(processName) -15s %(threadName)-10s %(name) -45s %(funcName) -25s L%(lineno)-6d: %(message)s'
  handlers:
    file:
      class : logging.handlers.RotatingFileHandler
      formatter: verbose
      filename: /var/log/newrelic/newrelic-plugin-agent.log
      maxBytes: 10485760
      backupCount: 3
  loggers:
    newrelic_plugin_agent:
      level: INFO
      propagate: True
      handlers: [console, file]
    requests:
      level: ERROR
      propagate: True
      handlers: [console, file]

Далее следует запустить New Relic Plugin Agent, в инструкции предлагается делать это следующим образом:

newrelic-plugin-agent -c PATH-TO-CONF-FILE [-f]

На мой взгляд это не самый удобный способ, поэтому для управления агентом в каталоге /etc/init.d/ создаем init-скрипт newrelic_plugin_agent следующего содержания:

#! /bin/sh
 
### BEGIN INIT INFO
# Provides:          newrelic_plugin_agent
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $remote_fs
# Should-Start:      $named
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: The New Relic Plugin Agent
# Description:       The New Relic Plugin Agent
### END INIT INFO
 
NAME=newrelic_plugin_agent
CONFIG=/etc/newrelic/newrelic-plugin-agent.cfg
DAEMON=/usr/local/bin/newrelic-plugin-agent
DAEMON_OPTS="-c $CONFIG"
DESC="New Relic Plugin Agent"
 
# define LSB log_* functions.
. /lib/lsb/init-functions
 
check_daemon() {
  if [ ! -x $DAEMON ]; then
    log_action_msg "$DAEMON not found" || true
    log_end_msg 1 || false
    exit 1
  fi
}
 
check_config() {
  if [ ! -e $CONFIG ]; then
    log_action_msg "Configuration file $CONFIG not found" || true
    log_end_msg 1 || false
    exit 1
  fi
}
 
check_pid() {
  if [ ! -d /var/run/newrelic ]; then
    install -m 777 -o newrelic -g newrelic -d /var/run/newrelic
    log_action_msg "PID directory was not found and created" || true
  fi;
}
 
PIDFILE=$(sed -n -e 's/^[ ]*pidfile[ ]*:[ ]*//p' -e 's/[ ]*$//' $CONFIG)
 
export PATH="${PATH:+$PATH:}/usr/sbin:/sbin/:usr/local/sbin:/usr/local/bin"
 
case "$1" in
  start)
    log_daemon_msg "Starting $DESC" "$NAME" || true
    check_daemon
    check_config
    check_pid
 
    if [ -s $PIDFILE ] && kill -0 $(cat $PIDFILE) > /dev/null 2>&1; then
      log_action_msg "apparently already running" || true
      log_end_msg 0 || true
      exit 0
    fi
 
    if start-stop-daemon --oknodo --start --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS; then
      log_end_msg 0 || true
    else
      log_end_msg 1 || false
    fi
  ;;
  stop)
    log_daemon_msg "Stopping $DESC" "$NAME" || true
    check_daemon
 
    if start-stop-daemon --oknodo --stop --pidfile $PIDFILE; then
      log_end_msg 0 || true
    else
      log_end_msg 1 || false
    fi
  ;;
  status)
   status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
   ;;
  restart|force-reload)
  $0 stop
  $0 start
  ;;
  *)
    echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
  exit 1
  ;;
esac
 
exit 0

Включаем и запускаем созданный сервис:

systemctl enable newrelic_plugin_agent.service
systemctl start newrelic_plugin_agent.service

Если все настроено верно, то через некоторое время графики появятся с системе мониторинга New Relic (вкладка PLUGINS).

tweet Share