Elasticsearch + Logstash + Kibana — система централизованного хранения и просмотра логов.
Установка выполняется на CentOS 6.6.
Система состоит из 4-х компонентов:
- Logstash — сервер обработки входящих логов;
- Logstash Forwarder — служба передачи логов с удалённого хоста на центральный сервер Logstash (будет рассмотрен в следующей части);
- Elasticsearch — хранение логов;
- Kibana — веб-интерфейс для просмотра и анализа логов.
Продолжение — в ELK: Elasticsearch+Logstash+Kibana — добавление удалённого хоста и настройка Logstash Forwarder.
Вот как будет выглядеть схема:
Содержание
Установка Java
Для работы Elasticsearch и Logstash требуется Java.
Установка описана тут>>>, только уже 8 версия:
# rpm -ivh /home/ec2-user/jdk-8u60-linux-x64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8.0_60-2000:1.8.0_60-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
jfxrt.jar...
# alternatives --install /usr/bin/java java /usr/java/jdk1.8.0_60/jre/bin/java 1
Установка Elasticsearch
Добавляем ключ:
# rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
Добавляем репозиторий — создаём файл /etc/yum.repos.d/elasticsearch.repo с таким содержимым:
[elasticsearch-1.4] name=Elasticsearch repository for 1.4.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Устанавливаем:
# yum install elasticsearch
Редактируем файл /etc/elasticsearch/elasticsearch.yml, и ограничиваем доступ только с localhost:
... network.host: localhost ...
Запускаем:
# service elasticsearch start Starting elasticsearch: [ OK ]
И добавляем в автозапуск:
# chkconfig --add elasticsearch # chkconfig --list elasticsearch elasticsearch 0:off 1:off 2:on 3:on 4:on 5:on 6:off
Установка Kibana
На странице загрузок>>> находим подходящую вверсию, в данном случае — LINUX 64-BIT, загружаем:
# cd /opt/ # wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz # tar xfp kibana-4.1.1-linux-x64.tar.gz # mv kibana-4.1.1-linux-x64 kibana4
Редактируем файл /opt/kibana4/config/kibana.yml, и тоже ограничиваем доступ только с localhost:
... # The host to bind the server to. host: "localhost" ...
Создаём init-скрипт — /etc/init.d/kibana (проверьте переменные, что бы пути совпадали с вашей системой/установкой):
#!/bin/sh
#
# /etc/init.d/kibana -- startup script for kibana
# Wolfyxvf 2015-04-16; used httpd init script as template
#
### BEGIN INIT INFO
# Provides: kibana
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts kibana
# Description: Starts kibana using daemon
### END INIT INFO
#configure this with wherever you unpacked kibana:
KIBANA_BIN=/opt/kibana4/bin
KIBANA_LOG="/var/log/kibana.log"
NAME=kibana
DESC="Kibana"
PID_FOLDER=/var/run/kibana/
PID_FILE=/var/run/kibana/$NAME.pid
LOCK_FILE=/var/lock/subsys/$NAME
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$KIBANA_BIN
DAEMON=$KIBANA_BIN/kibana
RETVAL=0
if [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"
exit 1
fi
# Source function library.
. /etc/rc.d/init.d/functions
if [ -f /etc/sysconfig/kibana ]; then
. /etc/sysconfig/kibana
fi
start() {
echo "Starting $DESC : "
pid=`pidofproc -p $PID_FILE kibana`
if [ -n "$pid" ] ; then
echo "Already running."
exit 0
else
# Start Daemon
if [ ! -d "$PID_FOLDER" ] ; then
mkdir $PID_FOLDER
fi
daemon $DAEMON >> $KIBANA_LOG 2>&1 &
sleep 2
pidofproc node > $PID_FILE
echo
RETVAL=$?
[ $RETVAL = 0 ] && touch $LOCK_FILE
return $RETVAL
fi
}
stop() {
echo -n $"Stopping $DESC : "
killproc -p $PID_FILE $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $PID_FILE $LOCK_FILE
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $PID_FILE $DAEMON
RETVAL=$?
;;
restart)
stop
start
;;
*)
echo $"Usage: $prog {start|stop|restart|status}"
RETVAL=2
esac
exit $RETVAL
# chmod +x /etc/init.d/kibana
Проверяем:
# service kibana status kibana is stopped
Запускаем:
# service kibana start Starting Kibana :
# chkconfig --add kibana
Проверяем:
# tail /var/log/kibana.log
{"name":"Kibana","hostname":"ip-172-30-0-69","pid":22999,"level":30,"msg":"No existing kibana index found","time":"2015-09-08T11:17:38.615Z","v":0}
{"name":"Kibana","hostname":"ip-172-30-0-69","pid":22999,"level":30,"msg":"Listening on 127.0.0.1:5601","time":"2015-09-08T11:17:38.628Z","v":0}
Установка NGINX
Добавляем, если нет, репозиторий Epel:
# yum -y install epel-release
Устанавливаем NGINX и утилиты:
# yum install nginx httpd-tools
Создаём пользователя для доступа к Kibana:
# htpasswd -c /etc/nginx/htpasswd.users kibanaadmin New password: Re-type new password: Adding password for user kibanaadmin
Создаём файл настроек виртуалхоста логгера, например /etc/nginx/conf.d/logger.domain.com.conf:
server {
listen 80;
server_name logger.domain.com;
auth_basic "Restricted Access";
auth_basic_user_file /etc/nginx/htpasswd.users;
location / {
proxy_pass http://localhost:5601;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Проверяем, запускаем, добавляем в автозапуск:
# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
# service nginx start Starting nginx: [ OK ]
# chkconfig --add nginx
Теперь можно проверить URL:
Ничего не меняем, продолжаем установку.
Установка Logstash
Добавляем репозиторий — в файл /etc/yum.repos.d/logstash.repo добавляем:
[logstash-1.5] name=logstash repository for 1.5.x packages baseurl=http://packages.elasticsearch.org/logstash/1.5/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Устанавливаем:
# yum install logstash
Создаём SSL-сертификаты для Logstash Forwarder (будут нужны позже):
# cd /etc/pki/tls # openssl req -subj '/CN=domain.com/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
Проверяем:
# ls -l certs/ | grep log -rw-r--r-- 1 root root 1180 Sep 8 11:48 logstash-forwarder.crt
# ls -l private/ | grep log -rw-r--r-- 1 root root 1704 Sep 8 11:48 logstash-forwarder.key
Что бы Logstash имел доступ к файлам в /var/log/, которые обычно принадлежат root:root:
# getfacl /var/log/maillog getfacl: Removing leading '/' from absolute path names # file: var/log/maillog # owner: root # group: root user::rwx group::rwx other::rwx
Что приведёт к ошибкам вида:
:message=>»failed to open /var/log/maillog: Permission denied — /var/log/maillog», :level=>:warn}
Создаём файл defaults (в данном случае — /opt/logstash/vendor/jruby/lib/ruby/shared/rubygems/defaults/logstash, или /etc/logstash/defaults — если устанавливали другим способом), в который прописываем:
LS_GROUP=root
На этом установка необходимых компонентов закончена, можно переходить к настройке Logstash.
Настройка Logstash
Создаём файл /etc/logstash/conf.d/rsyslog.conf:
input {
file {
path => [ "/var/log/maillog" ]
type => "syslog"
start_position => "beginning"
}
}
filter {
if [type] == "syslog" {
grok {
match => [ "message", "%{HOSTNAME}" ]
}
}
}
output {
elasticsearch { host => localhost }
}
Кратко рассмотрим что тут выполняется:
input— обработка входящих данных, использует модульfile, описывающий входящие данные; в данном случае — данные мы получаем из файла;
filter— обработка полученных отinputданных, использует модульgrok, определяющий какие данные будут проиндексирвоаны и добавлены (данные типmessageв которых встречается шаблон%{HOSTNAME}, шаблоны описаны в файлеgrok-patterns, в данном случае он находится в/opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-0.3.0/patterns/grok-patterns);
output— передаёт данные, прошедшие фильтр, на «backend», в данном случае — в Elasticserch, из которого данные потом появляются в Kibana.
Проверяем синтаксис файла конфигурации:
# /opt/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/rsyslog.conf
Перезапускаем Logstash:
# service logstash restart logstash started.
Настройка Kibana
Теперь можно добавить данные в веб-интерфейс.
Переходим на страницу Kibana, и добавляем новый индекс, который позволит Kibana работать с индексами Elasticsearch:
После чего переходим в Discover — и наблюдаем логи:
Продолжение — в ELK: Elasticsearch+Logstash+Kibana — добавление удалённого хоста и настройка Logstash Forwarder.
Ссылки по теме
http://blog.sematext.com/2013/12/19/getting-started-with-logstash/
https://www.elastic.co/products/logstash
http://habrahabr.ru/post/122531/
http://grokdebug.herokuapp.com/
https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations
https://www.elastic.co/guide/en/beats/packetbeat/current/_kibana_query_and_filter.html
https://www.elastic.co/guide/en/kibana/3.0/queries.html








