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