ELK Stack практика

A, ELK создать статьи

Официальный адрес сайта: https: //www.elastic.co/cn/

Полное руководство на официальном сайте: https: //www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

Руководство по установке: https: //www.elastic.co/guide/en/elasticsearch/reference/2.x/rpm.html

Лось Elasticsearch, Logstash, Kibana Короче говоря, эти три являются основной набор, но не все.

Elasticsearch в режиме реального времени полнотекстового поиска и анализ двигатель, который обеспечивает сбор, анализ, хранение данных три функций, REST является открытой и JAVA API и другие структуры, чтобы обеспечить эффективные возможности поиска, масштабируемые распределенные системы. Он построен на вершине библиотеки поисковой системы Apache Lucene.

Logstash используется для сбора, анализа, журнал фильтрации инструментов. Он поддерживает практически любой тип журнала, в том числе системных журналов, журналов ошибок и журнала пользовательских приложений. Он может получить журнал из многих источников, эти источники включают системный журнал, обмен сообщениями (например, RabbitMQ) и JMX, можно выводить данные в различных формах, в том числе по электронной почте, и WebSockets Elasticsearch.

Kibana представляет собой веб-графический интерфейс на основе данных, относящихся к бревну, хранится в анализе и визуализации Elasticsearch Index. Он использует интерфейс Elasticsearch REST для извлечения данных, а не только позволяет пользователям создавать свои собственные индивидуальные вид приборной панели данных, но и позволяет им специальный способ запроса и фильтрации данных

окружающая среда

Centos6.5 два IP: 192.168.1.224 установки: elasticsearch, logstash, Kibana, то Nginx, то Redis 
          192.168.1.157 установки: elasticsearch (оба закрыты и Iptables SElinux)

устанавливать

Yum установить elasticsearch ключевого источника (необходимость настроить на все серверах) 
RPM --import https://artifacts.elastic.co/GPG-KEY-elasticsearch  

конфигурации elasticsearch, источник ня, добавив файл elasticsearch.repo следующий 
Vim /etc/yum.repos.d/elasticsearch.repo 
[elasticsearch-2.x] 
имя = elasticsearch Repository Пакеты для 2.x 
BaseUrl = HTTPS: //packages.elastic.co/elasticsearch/2.x/centos 
. = 1 gpgcheck 
gpgkey = HTTPS: //packages.elastic.co/GPG-KEY-elasticsearch 
. Включено 1 =

среда elasticsearch установки

Установка elasticsearch 
# Yum установки -Y elasticsearch 

монтажа среда Java (Java среда должна быть не менее 1,8 версия) 
1.tar zxvf ./jdk-8u151-linux-x64.tar.gz -C / USR / Lib / JVM 
2. Команда ВИМ / и т.д. / файл Bashrc, файл с конечной поверхности: 
Экспорт JAVA_HOME = / USR / Библиотека / JVM / jdk1.8.0_151 
Экспорт JRE_HOME JAVA_HOME = $ {} / JRE 
exportCLASSPATH = :. $ {в этих JAVA_HOME} / Библиотека: $ { } JRE_HOME / Библиотека 
Экспорт PATH = $ {JAVA_HOME} / бен: $ PATH 
3. обновляется переменная среды 
Source / и т.д. / Bashrc 
4. убедиться , что установка прошла успешно 
Java -version 
эхо PATH $

Создание данных каталога elasticsearch и изменить владелец представляет собой группу из каталога

# Mkdir -p / данные / ES- данных ( каталог данных для хранения пользовательских данных) 
# Чаун -R & л elasticsearch: elasticsearch / данные / данные Е.С.

Модифицированный владелец elasticsearch представляет собой группу из журнала

# Чаун -R elasticsearch: elasticsearch / вар / Журнал / elasticsearch /

Elasticsearch изменения файлов конфигурации

Vim /etc/elasticsearch/elasticsearch.yml # 

# найти файл конфигурации cluster.name, откройте конфигурацию и установите имя кластера 
cluster.name: Oldboy 

# найти файл конфигурации node.name, откройте конфигурацию и установить имя узла 
узла .name:. ywxi 1-  
# изменить данные , хранящийся путь 
Path.Data: / данные / данные ES  
# журналов изменены путь журнала 
path.logs: / Var / журнал / elasticsearch / 

# использования памяти с конфигурированием подкачки 
bootstrap.memory_lock: к подлинному 
# монитор сетевого адреса 
network.host: 0.0.0.0  
# прослушивает порт открыт 
http.port: 9200   
# отключить широковещательный адрес распространения 
discovery.zen.ping.multicast.enabled ложь  
# Указывает IP - сети, пусть они найдут кластерную 
открытие .zen.ping.unicast.hosts: [ "192.168.1.224", " 192.168.1.157"]

начать обслуживание

[AL7 elasticsearch корень @] # /etc/init.d/elasticsearch Начало 
Запуск elasticsearch: HotSpot Java - ((TM)) 64-разрядного сервера предупреждения VM: INFO: OS :: commit_memory (0x0000000085330000, 2060255232, 0) не, ошибка = «не может выделить память «(ошибка = 12) 
# 
# Там не хватает памяти для на The в Java Runtime Environment на Continue. 
# Native Распределение памяти (MMAP) Сбой в карте 2,060,255,232 байт для совершение. в зарезервированной памяти. 
# ошибка файла отчета с дополнительной информацией сохраняется как : 
# /tmp/hs_err_pid2616.log 
                                                           [FAILED] 
эта ошибка происходит потому , что размер памяти по умолчанию является 2G, виртуальная машина не так много места , 

чтобы изменить параметры: 
ВИМ /etc/elasticsearch/jvm.options 
-Xms512m 
-Xmx512m
 
начать снова
/etc/init.d/elasticsearch начинают видеть состояние службы, если есть ошибка , которую вы можете увидеть ошибки входа меньше /var/log/elasticsearch/demon.log (имя лога именем кластера) , 

чтобы создать загрузочный сервис от начала 
# chkconfig elasticsearch на

Меры предосторожности

ВЬЕТ /etc/security/limits.conf #开启elasticsearch用户锁住内存
# позволяют пользователю 'elasticsearch' mlockall 
elasticsearch мягкого memlock неограниченного 
elasticsearch жесткого memlock неограниченный 

[корню @ 227 elasticsearch] # /etc/init.d/elasticsearch перезагружать                          
Останов elasticsearch: [FAILED] 
Начиная elasticsearch: исключение в потоке «главный» java.lang.IllegalStateException: чудо плагин требует лицензии плагин для установки 
        на org.elasticsearch.marvel.license.LicenseModule.verifyLicensePlugin (LicenseModule.java:37) 
        в org.elasticsearch .marvel.license.LicenseModule. <INIT> (LicenseModule.java:25)
        на org.elasticsearch.marvel.MarvelPlugin.nodeModules (MarvelPlugin.java:89) 
        в org.elasticsearch.plugins.PluginsService.nodeModules (PluginsService.java:263) 
        при org.elasticsearch.node.Node. <INIT> (Node.java : 179) 
        в org.elasticsearch.node.Node <INIT> (Node.java:140). 
        на org.elasticsearch.node.NodeBuilder.build (NodeBuilder.java:143) 
        в org.elasticsearch.bootstrap.Bootstrap.setup ( Bootstrap.java:194) 
        в org.elasticsearch.bootstrap.Bootstrap.init (Bootstrap.java:286) 
        в org.elasticsearch.bootstrap.Elasticsearch.main (Elasticsearch.java:45) 
Обратитесь к журналу для получения полной информации об ошибках. 
                                                           [НЕ УДАЛОСЬ] 
报错解决: / USR / доли / elasticsearch / бен / плагин установить лицензионный #安装下插件解决

Порт 9200 через запрос браузера, посмотрите на успех

9200 порт , чтобы проверить , является ли его 
[корень @ AL7 elasticsearch] # NetStat -tnlp | Grep 9200 
ТСР 0 0 ::: 9200 ::: * LISTEN 4760 / в Java

Как взаимодействовать и elasticsearch

JAVAAPI 

RESTful API 
Javascript, .Net, PHP, Perl, Python 

利用API查看状态# локон -i -XGET "локальный: 9200 / _count довольно?  
    HTTP / 1.1 200 OK 
    Content-Type: применение / JSON; кодировка = UTF-8 
    Content-Length: 95 

    { "счетчик": 0, "_shards": { "всего": 0, "успешных": 0, "не удалось": 0 
      } 
    }

Установить пробку

Установка elasticsearch головки вилки. 1 / USR / доли / elasticsearch / bin / mobz в установке плагина / elasticsearch головки 
# доступа http://192.168.1.224:9200/_plugin/head 

Подключите монитор 2 ES / USR / доли / elasticsearch / бен / плагин установить lmenezes / elasticsearch-Kopf 
# доступ http://192.168.1.224:9200/_plugin/kopf 
браузера посетить: HTTP: //192.168.1.224: 9200 / _plugin / голова / # ywxi-1 и ywxi-2 является Я беру узел , где другие два являются узлами коллеги

image.png

LogStash использование

安装Logstash环境:

官方安装手册:
https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

下载yum源的密钥认证:
# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch
#配置logstash的yum源,在logstash.repo文件中添加如下内容
vim logstash.repo
[logstash-2.4]
name=Logstash repository for 2.4.x packages
baseurl=https://packages.elastic.co/logstash/2.4/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

# yum install -y logstash
查看下logstash的安装目录
# rpm -ql logstash

#创建一个软连接,每次执行命令的时候不用在写安装路劲(默认安装在/usr/share下)ln -s /opt/logstash/bin/logstash /bin/

执行logstash的命令
# logstash -e 'input { stdin { } } output { stdout {} }'运行成功以后输入:
nihao

stdout返回的结果:

image.png

注:
   -e 执行操作 input 标准输入
   { input } 插件  output  标准输出
   { stdout }  插件  

通过rubydebug来输出下更详细的信息
# logstash -e 'input { stdin { } } output { stdout {codec => rubydebug} }'

执行成功输入:
nihao

stdout输出的结果:

image.png

如果标准输出还有elasticsearch中都需要保留应该怎么玩,看下面
# logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.1.224:9200"] } stdout { codec => rubydebug }}'

运行成功以后输入:
I am elk

返回的结果(标准输出中的结果):

image.png

logstash使用配置文件

官方指南:https://www.elastic.co/guide/en/logstash/current/configuration.html  
创建配置文件01-logstash.conf
# vim /etc/logstash/conf.d/elk.conf 文件中添加以下内容input { stdin { } }output {  elasticsearch { hosts => ["192.168.1.224:9200"] }  stdout { codec => rubydebug }
}

使用配置文件运行logstash# logstash -f ./elk.conf运行成功以后输入以及标准输出结果

image.png

logstash的数据库类型

1. Input插件
    权威指南:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
    
    file插件的使用    
    # vim /etc/logstash/conf.d/elk.conf
        # 添加如下配置
    input {
        file {
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
            }
    }
    output {    
             elasticsearch {
                    hosts => ["192.168.1.224:9200"]
                    index => "system-%{+YYYY.MM.dd}"
                }
    }


运行logstash指定elk.conf配置文件,进行过滤匹配#logstash -f /etc/logstash/conf.d/elk.conf

image.png

来一发配置安全日志的并且把日志的索引按类型做存放,继续编辑elk.conf文件

# vim /etc/logstash/conf.d/elk.conf添加secure日志的路径
input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }

    file {
        path => "/var/log/secure"
        type => "secure"
        start_position => "beginning"
    }
}

output {    if [type] == "system" {

        elasticsearch {
            hosts => ["192.168.1.224:9200"]
            index => "system-%{+YYYY.MM.dd}"
        }
    }    if [type] == "secure" {

        elasticsearch {
            hosts => ["192.168.1.224:9200"]
            index => "nagios-secure-%{+YYYY.MM.dd}"
        }
    }
}

运行logstash指定elk.conf配置文件,进行过滤匹配# logstash -f ./elk.conf

image.png

这些设置都没有问题之后,接下来安装下kibana,可以让在前台展示

Kibana的安装及使用

安装kibana环境

官方安装手册:https://www.elastic.co/guide/en/kibana/current/install.html

下载kibana的tar.gz的软件包
[root@al7 conf.d]#  cd /usr/local/src/
[root@al7 src]# wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz

解压kibana的tar包
[root@al7 src]# tar zxvf kibana-4.3.1-linux-x64.tar.gz

进入解压好的kibana
[root@al7 src]# mv kibana-4.3.1-linux-x64 /usr/local/ #在/usr/local创建kibana的软连接
[root@al7 src]# ln -s /usr/local/kibana-4.3.1-linux-x64/ /usr/local/kibana

编辑kibana的配置文件
[root@al7 src]# vim /usr/local/kibana/config/kibana.yml 
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.1.224:9200"   
kibana.index: ".kibana"

#安装screen,以便于kibana在后台运行(当然也可以不用安装,用其他方式进行后台启动)
[root@al7 src]# yum -y install screen
[root@al7 src]# screen

/usr/local/kibana/bin/kibana
Crtl a+d  退出 
[root@al224 ~]# screen -ls
There is a screen on:
        2257.pts-0.al224        (Detached)
1 Socket in /var/run/screen/S-root.


打开浏览器并设置对应的index   http://IP:5601

添加ES的索引到kibana里

image.png

image.png

二、ELK实战篇

好,现在索引也可以创建了,现在可以来输出nginx、message、secrue的日志到前台展示(Nginx有的话直接修改,没有自行安装)

编辑nginx配置文件,修改以下内容(在http模块下添加)

log_format json '{"@timestamp":"$time_iso8601",'
             '"@version":"1",'
             '"client":"$remote_addr",'
             '"url":"$uri",'
             '"status":"$status",'
             '"domian":"$host",'
             '"host":"$server_addr",'
             '"size":"$body_bytes_sent",'
             '"responsetime":"$request_time",'
             '"referer":"$http_referer",'
             '"ua":"$http_user_agent"'
          '}';

修改access_log的输出格式为刚才定义的json 
access_log  logs/elk.access.log  json;



编辑logstash配置文件,进行日志收集
vim /etc/logstash/conf.d/full.conf

    input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }   

    file {
        path => "/var/log/secure"
        type => "secure"
        start_position => "beginning"
    }   
    file {
        path => "/usr/local/nginx/logs/elk.access.log"
        type => "nginx"
        start_position => "beginning"
    }   

}
    
output {    if [type] == "system" { 

        elasticsearch {
            hosts => ["192.168.1.224:9200"]
            index => "nagios-system-%{+YYYY.MM.dd}"
        }       
    }   

    if [type] == "secure" {

        elasticsearch {
            hosts => ["192.168.1.224:9200"]
            index => "nagios-secure-%{+YYYY.MM.dd}"
        }
    }    
     if [type] == "nginx" {

        elasticsearch {
            hosts => ["192.168.1.224:9200"]
            index => "nginx-log-%{+YYYY.MM.dd}"
        }
    }

}

运行看看效果如何
logstash -f /etc/logstash/conf.d/full.conf

image.png

可以发现所有创建日志的索引都已存在,接下来就去Kibana创建日志索引,进行展示(按照上面的方法进行创建索引即可),看下展示的效果

ab压测下: ab -n 20000 -c 1000 http://192.168.1.224/image.png

具体的日志输出需求,进行具体的分析

三:ELK终极篇

安装reids 
# yum install -y redis

修改redis的配置文件
# vim /etc/redis.conf

修改内容如下
daemonize yes

bind 192.168.1.224启动redis服务
# /etc/init.d/redis restart

测试redis的是否启用成功
# redis-cli -h 192.168.1.224输入info如果有不报错即可
redis 192.168.1.224:6379> info

 

编辑配置redis-out.conf配置文件,把标准输入的数据存储到redis中
# vim /etc/logstash/conf.d/redis-out.conf

添加如下内容
input {
            stdin {}
}

output {

        redis {
                host => "192.168.1.224"
                port => "6379"
                db => '6'
                data_type => "list"
                key => 'demo'
        }
}

运行logstash指定redis-in.conf的配置文件# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-out.conf


编辑配置redis-in.conf配置文件,把reids的存储的数据输出到elasticsearch中
# vim /etc/logstash/conf.d/redis-out.conf添加如下内容
input{
    redis {
                    host => "192.168.1.224"
                    port => "6379"
                    db => '6'
                    data_type => "list"
                    key => 'demo'
            }

}

output {
        elasticsearch {
                hosts => ['192.168.1.224:9200']
                index => 'redis-test-%{+YYYY.MM.dd}'
        }
}

运行logstash指定redis-in.conf的配置文件# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-out.conf

image.png

把之前的配置文件修改一下,变成所有的日志监控的来源文件都存放到redis中,然后通过redis在输出到elasticsearch中
更改为如下,编辑full.conf
input {
   file {
            path => "/var/log/nginx/access_json.log"
            type => "nginx"
            start_position => "beginning"
    }
    file {
            path => "/var/log/secure"
            type => "secure"
            start_position => "beginning"
    }
    file {
            path => "/var/log/messages"
            type => "system"
            start_position => "beginning"
    }
}
output {   
      if [type] == "nginx" {
        redis {
            host => "192.168.1.224"
            port => "6379"
            db => "6"
            data_type => "list"
            key => 'nginx' 
        }
    }   
    if [type] == "secure" {
        redis {
            host => "192.168.1.224"
            port => "6379"
            db => "6"
            data_type => "list"
            key => 'secure' 
        }
    }    
    if [type] == "system" {
        redis {
            host => "192.168.1.224"
            port => "6379"
            db => "6"
            data_type => "list"
            key => 'system' 
        }
    }
} 
运行logstash指定shipper.conf的配置文件# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/full.conf在redis中
(查看是否已经将数据写到里面(有时候输入的日志文件不产生日志,会导致redis里面也没有写入日志)

image.png

把redis中的数据读取出来,写入到elasticsearch中(需要另外一台主机做实验)

编辑配置文件
# vim /etc/logstash/conf.d/redis-out.conf
添加如下内容
input {

    redis { type => "system" host => "192.168.1.224" port => "6379" db => "6" data_type => "list" key => 'system' batch_count => 1 } redis { type => "nginx" host => "192.168.1.224" port => "6379" db => "6" data_type => "list" key => 'nginx' batch_count => 1 } redis { type => "secure" host => "192.168.1.224" port => "6379" db => "6" data_type => "list" key => 'secure' batch_count => 1 } } output { if[type] == "system" { elasticsearch { hosts => ["192.168.1.224:9200"] index => "system-%{+YYYY.MM.dd}" } } if[type] == "nginx" { elasticsearch { hosts => ["192.168.1.224:9200"] index => "nginx-%{+YYYY.MM.dd}" } } if[type] == "secure" { elasticsearch { hosts => ["192.168.1.224:9200"] index => "secure-%{+YYYY.MM.dd}" } } }
 

image.png

  注意: input是从客户端收集的 output是同样也保存到192.168.1.224中的elasticsearch中,如果要保存到当前的主机上,可以把output中的hosts修改成localhost,如果还需要在kibana中显示,需要在本机上部署kabana,为何要这样做,起到一个松耦合的目的。说白了,就是在客户端收集日志,写到服务端的redis里或是本地的redis里面,输出的时候对接ES服务器即可 运行

命令看看效果# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis-out.conf

 

上线ELK

    1. Войдите в систему классификации 
        системный журнал Rsyslog logstash системный журнал виджет 
        доступа войти Nginx logstash кодека JSon 
        файла журнала ошибок logstash Mulitline 
        журнала запустите файл logstash кодек JSon 
        журнала Устройство системного журнала Syslog logstash виджет 
        Debug файл журнала logstash JSON или Mulitline   
    2. Журнал нормализуется 
        путь фиксации 
        формата возможного json3. начало системного журнала -> журнал ошибок -> запустить журнал -> журнал доступа

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

свернуться -X DELETE http://xx.xx.com:9200/logstash-*-`date +% Y-% m-% d-d "- $ N дней" `

рекомендация

отwww.cnblogs.com/Leslieblog/p/10929430.html