日志框架ELK:目前主要是概念介绍、搭建过程
Clone or download
Pull request Compare This branch is even with maxwellyue:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
elk
filebeat
.gitattributes
README.md

README.md

docker-elk


项目来源:


简介

todo


安装与部署

elasticsearch + kibana + logstash安装在一台机器上,filebeat可以安装在多台机器上(有日志需要收集的机器上)。

elk的安装

进入到docker-elk/elk目录下,执行以下命令:

docker-compose up -d

这样就在后台启动了elk,如果不想后台,想看到启动运行情况,可以去掉-d参数,执行以下命令:

docker-compose up

该命令会默认在当前目录寻找docker-compose.yml文件,并以该文件制定的参数进行启动服务。

建议先看一遍该目录下的README说明,原作者讲解的很详细。

打开该文件,其中的几个参数含义是:build指定Dockerfile位置,volumes指定容器内目录与宿主机目录的对应关系,ports指定容器端口与宿主机端口的对应关系,environment用于设定系统变量。

  • 如果想要更改elasticsearch的数据持久化目录,则修改docker-compose.yml文件下elasticsearch节点下配置,将./storage替换为你想存放elasticsearch的数据的目录即可;如果不需要持久化,将该行配置删除即可。(注意:由于在Elasticsearch镜像中使用了elasticsearch用户,所以,需要将持久化目录的拥有者设置为1000:chown -R 1000 ./storage )
- ./storage:/usr/share/elasticsearch/data
  • logstash的配置文件主要是docker-elk/elk/logstash/pipeline下的logstash.conf。日志的过滤(filter)在此配置。该文件中,if[type]== "nginx"中type是在filebeat的设置的。即filebeat在收集日志文件往logstash传输时,可以给日志设置type进行分类(当然不止这一种分类方式)。

  • 如果出现连接问题,请使用curl http://localhost:9200类似curl命令进行测试,排除端口未开放导致的网络连接问题。centos7及以上的防火墙不再使用iptables,而是使用filewall。同时,如果你是云主机,注意查看配置的安全组(只有安全组和防火墙同时允许通过,你的连接才可以通过)。

filebeat的安装

进入docker-elk/filebeat目录下,运行

docker-compose up

即可启动服务。

默认配置的日志目录为docker-elk/filebeat/logs目录(即实际项目输出的日志所在的目录),打开docker-elk/filebeat目录下的docker服务配置文件docker-compose.yml,修改第10行

      - ./logs:/logs

./logs替换为实际的日志位置,假如你的日志输出在/var/log/java目录下,则修改为:

      - /var/log/java:/logs 

filebeat还可以为每个传输的日志(同一个路径下的文件)加一些标签,通过field属性设置,可以参考配置文件中的写法:增加了app_id和type两个属性。这样在日志达到了logstash之后,就可以根据这些标签进行区分是哪里来的日志。

日志解析

  • Java日志 如果你可以修改日志的输出格式,且使用的logback作为项目的日志组件,则可以将日志的pattern修改为:
 <encoder>
            <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [${HOSTNAME}] [%thread] %level %logger{36}@%method:%line - %msg%n</pattern>
        </encoder>

实际输出如下:

[2017-09-05 21:55:43.223] [bogon] [http-nio-8090-exec-5] DEBUG o.s.web.servlet.DispatcherServlet@processRequest:1000 - Successfully completed request

则filebeat.yml多行合并可以写为

   multiline: # 多行处理    
        pattern: '^\['
        match: after
        negate: true    

对应的logstash的filter中grok正则表达式为:

grok {
                    match => { "message" => "(?m)\[%{TIMESTAMP_ISO8601:timestamp}\] \[%{HOSTNAME:host}\] \[%{DATA:thread}\] %{LOGLEVEL:logLevel} %{DATA:class}@%{DATA:method}:%{DATA:line} \- %{GREEDYDATA:message}" }
            }

如果不能修改项目的日志输出样式,请学习grok的正则表达式,进行解析。

  • nginx日志

  • mysql慢日志