ELK日志分析平台搭建

版权声明:转载请注明出处 https://blog.csdn.net/hlandcl/article/details/83684202

一、使用背景

当生产环境为分布式、很多业务模块的日志需要每时每刻查看时

二、环境

系统:centos 6.5

JDK:jdk1.8+

elasticsearch-6.4.2

logstash-6.4.2

kibana-6.4.2

三、安装

1、安装JDK

下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

本环境下载的是64位tar.gz包,将安装包拷贝至安装服务器/usr/local目录

[root@localhost ~]# cd /usr/local/ 
           [root@localhost local]# tar -zvxf jdk-8u111-linux-x64.tar.gz

配置环境变量

[root@localhost local]# vim /etc/profile

将下面的内容添加至文件末尾(假如服务器需要多个JDK版本,为了ELK不影响其它系统,也可以将环境变量的内容稍后添加到ELK的启动脚本中)

JAVA_HOME=/usr/local/jdk1.8.0_111
           JRE_HOME=/usr/local/jdk1.8.0_111/jre
           CLASSPATH=.:$JAVA_HOME/lib:/dt.jar:$JAVA_HOME/lib/tools.jar
           PATH=$PATH:$JAVA_HOME/bin
           export  JAVA_HOME
           export  JRE_HOME

环境变量立即生效:

[root@localhost local]# source /etc/profile

2、设置limit相关参数

[root@localhost local]# vim /etc/security/limits.conf
           添加以下内容

* soft nproc 1024
           * hard nproc 4096
           * soft nofile 65536
           * hard nofile 65536

3、创建elk用户,用于运行elk

[root@localhost local]# groupadd elk

[root@localhost local]# useradd -g elk elk

[root@localhost local]# passwd elk

创建elasticsearch运行目录:

[root@localhost local]# mkdir /elk
           [root@localhost local]# chown -R elk:elk /elk

关闭防火墙

[root@localhost local]# service iptables stop

或者在iptables开放端口

[root@localhost local]# vim /etc/sysconfig/iptables

加入:-A INPUT -m state --state NEW -m tcp -p tcp --dport 9200 -j ACCEPT

重启iptables服务,立即生效配置

[root@localhost local]# service iptables restart

以上全部以root用户操作

4、安装elasticsearch

以下由elk用户操作

以elk用户登录服务器

下载ELK安装包:https://www.elastic.co/downloads,并上传到服务器放入/elk目录并解压,解压命令:tar -xzvf 包名

配置elasticsearch:

修改如下内容:

保存退出

启动elasticsearch:

查看是否启动成功:

用浏览器访问:http://192.168.115.149:9200

elasticsearch安装完毕

5、安装logstash

logstash是ELK中负责收集和过滤日志的

写入配置:


 

input{
    file{
        type => "api-app"
        path => "/log/api-app*"
        codec => multiline{
            pattern => "^\["
            negate => true
            what => "previous"
        }
    }
    file{
        type => "api-cxb"
        path => "/log/api-cxb*"
        codec => multiline{
            pattern => "^\["
            negate => true
            what => "previous"
        }
        start_position => "beginning"
    }
}
filter{
    grok{
        match => { "message" => "\[%{TIMESTAMP_ISO8601}\s*%{USER}\] \[%{USERNAME}\] \[%{USERNAME}\] - %{NOTSPACE}, IP: %{IP:ip}" }
    }
    grok{
        match => { "message" => "\[%{TIMESTAMP_ISO8601:date1}\s*%{USER:leve}\] \[%{USERNAME}\] \[%{USERNAME}\] - %{NOTSPACE:request}" }
    }
}
output{
    elasticsearch{
        hosts => ["192.168.115.149:9200"]
        action => "index"
        codec => rubydebug
        index => "%{type}-%{+YYYY.MM.dd}"
        template_name => "%{type}"
    }
}

解释:

logstash的配置文件须包含三个内容:

input{}:此模块是负责收集日志,可以从文件读取、从redis读取或者开启端口让产生日志的业务系统直接写入到logstash

filter{}:此模块是负责过滤收集到的日志,并根据过滤后对日志定义显示字段

output{}:此模块是负责将过滤后的日志输出到elasticsearch或者文件、redis等

output直接输出到Elasticsearch

本环境需处理两套业务系统的日志

type:代表类型,其实就是将这个类型推送到Elasticsearch,方便后面的kibana进行分类搜索,一般直接命名业务系统的项目名

path:读取文件的路径

这个是代表日志报错时,将报错的换行归属于上一条message内容

start_position => "beginning"是代表从文件头部开始读取

filter{}中的grok是采用正则表达式来过滤日志,其中%{TIMESTAMP_ISO8601}代表一个内置获取2018-11-03 00:00:03,731时间的正则表达式的函数,%{TIMESTAMP_ISO8601:date1}代表将获取的值赋给date1,在kibana中可以体现出来

本环境有两条grok是代表,第一条不符合将执行第二条

其中index是定义将过滤后的日志推送到Elasticsearch后存储的名字

%{type}是调用input中的type变量(函数)

启动logstash

启动成功,logstash安装完毕。

6、安装kibana

编辑如下配置项:

保存退出

启动kibana

启动kibana成功,访问:http://192.168.115.149:8888

 

 

7、安装过程中出现的错误及解决办法

启动elasticsearch报错:max number of threads [1024] for user [elk] is too low, increase to at least [4096]

解决办法:

修改配置文件/etc/security/limits.d/90-nproc.conf或者/etc/security/limits.d/20-nproc.conf,

修改如下配置:

保存退出,重启服务器即可生效。

 

猜你喜欢

转载自blog.csdn.net/hlandcl/article/details/83684202