Мониторинг php-fpm с помощью New Relic Plugin Agent
Jan 26, 2017 21:05 · 580 words · 3 minute read
Ранее мы уже упоминали о системе мониторинга 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).