微服务下,使用ELK作日志收集及分析

1、使用背景

  目前项目中,采用的是微服务框架,对于日志,采用的是logback的配置,每一个微服务的日志,都是经过File的方式存储在部署的机器上,可是因为日志比较分散,想要检查各个微服务是否有报错信息,须要挨个服务去排查,比较麻烦。因此但愿经过对日志进行聚合,而后经过监控,可以快速的找到各个微服务的报错信息,快速的排查。java

2、ELK分析

  对于ELK,主要是分为Elastic Search、Logstash和Kibana三部分:其中Logstash做为日志的汇聚,能够经过input、filter、output三部分,把日志收集、过滤、输出到Elastic Search中(也能够输出到文件或其余载体);Elastic Search做为开源的分布式引擎,提供了搜集、分析、存储数据的功能,采用的是restful接口的风格;Kibana则是做为Elastic Search分析数据的页面展现,能够进行对日志的分析、汇总、监控和搜索日志用。linux

  本次使用ELK主要则是做为日志分析场景。json

3、ELK部署

  一、Elastic Search安装

    本次部署的目录为【/data/deploy/elk】下,首先须要下载,下载命令为:  vim

# cd /data/deploy/elk
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz

    解压到当前目录:restful

# tar -zxvf elasticsearch-6.4.3.tar.gz

    相关配置:app

# cd elasticsearch-6.4.3/config
# vim elasticsearch.yml

-- 增长以下内容:
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

    Elastic Search启动:因为ES的启动不能用root帐号直接启动,须要新建立用户,而后切换新用户去启动,执行命令以下:cors

-- 建立新用户及受权
# groupadd elsearch
# useradd elsearch -g elsearch -p elasticsearch
# cd /data/deploy/elk/
# chown -R elsearch:elsearch elasticsearch-6.4.3
-- 切换用户,启动
# su elsearch
# cd elasticsearch-6.4.3/bin
# sh elasticsearch &

    启动过程当中,会出现一些报错信息,如:框架

    一、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]elasticsearch

    二、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]tcp

    解决问题(1):将当前用户的软硬限制调大。

# vim /etc/security/limits.conf
-- 在后面增长一下配置后,保存退出
es soft nofile 65535
es hard nofile 65537
-- 不须要重启,从新登陆即生效
-- 查看修改命名是否生效
# ulimit -n 65535
# ulimit -n
-- 结果65535
# ulimit -H -n 65537
# ulimit -H -n
-- 结果65537

    解决问题(2):调大elasticsearch用户拥有的内存权限

-- 切换到root用户
# sysctl -w vm.max_map_count=262144
-- 查看修改结果
# sysctl -a|grep vm.max_map_count
-- 结果显示:vm.max_map_count = 262144

-- 永久生效设置
# vim /etc/sysctl.conf
-- 在文件最后增长如下内容,保存后退出:
vm.max_map_count=262144

    解决以上问题后,再次启动:

# su - elsearch
# cd /data/deploy/elk/elasticsearch-6.4.3/bin/
# sh elasticsearch &

    启动成功后,访问:http://ip:9200,能够有json格式的返回信息,判断安装成功。

  二、Kibana的安装

    下载安装包:

-- 切换到root用户
# su
-- 下载
# cd /data/deploy/elk/
# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.2-linux-x86_64.tar.gz

    解压配置:

# tar -zxvf kibana-6.4.2-linux-x86_64.tar.gz
# cd kibana-6.4.2-linux-x86_64/config/
# vim kibana.yml
-- 增长以下配置:
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://localhost:9200"
kibana.index: ".kibana"

    启动Kibana:

# cd /data/deploy/elk/kibana-6.4.2-linux-x86_64/bin
# sh kibana &

    启动成功后,访问http://ip:5601,查看是否启动成功。

  三、Logstash安装

    下载安装包:

-- 切换到root帐号
# su
# cd /data/deploy/elk
# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.2.tar.gz

    解压配置:

# tar -zxvf logstash-6.4.2.tar.gz
# cd logstash-6.4.2/bin
-- 新增编辑配置文件
# vim logstash.conf
-- 增长如下内容:
input {
    tcp {
        port => 5044
        codec => json_lines
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
    }
}

    启动Logstash:

# cd /data/deploy/elk/logstash-6.4.2/bin
# nohup sh logstash -f logstash.conf  &

    查看日志,无报错信息,默认启动成功。

4、微服务配置

  在微服务中,须要两步操做:

  一、pom.xml文件增长依赖

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.1</version>
</dependency>

  二、修改logback.xml配置文件

-- 新增appender
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <destination>192.168.11.199:5044</destination>
    <queueSize>1048576</queueSize>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                        {
                        "severity":"%level",
                        "service": "%contextName",
                        "pid": "${PID:-}",
                        "thread": "%thread",
                        "class": "%logger{40}",
                        "rest": "%message->%ex{full}"
                        }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

-- <root>节点中,增长:
<appender-ref ref="LOGSTASH" />  

5、Kibana的使用        

  经过以上的配置,基本上ELK和微服务之间,已经配置完成,接下来须要经过在Kibana中建立索引等进行日志的搜索和查看。

  一、建立索引

    能够新建一个全局的索引,【Index pattern】设置为【*】,点击下一步至完成为止。

  二、日志搜索

    如截图所示,能够经过Discover和新建的索引,对日志进行详细的查看,而且能够选择具体的字段进行查看。在右上角,能够经过选择不一样的时间段,对日志进行查看和搜索。

  三、建立查询

    如2中截图所示,能够经过添加filter,对日志进行过滤查询。而后点击Save后,能够建立新的查询。

  四、建立Visualize和Dashboard

    建立完查询后,能够在Visualize中,建立一个新的图示,经过查询进行建立。建立Dashboard,依赖Visualize图示,进行展现。

    即依赖关系:Dashboard -》 Visualize -》 Search

    在本项目中,Search主要是经过增长了两个Filter:①service:“ff-watersource” ②severity:“ERROR”,查询的是微服务为ff-watersource的error级别的日志。而后根据本Search,依次建立Visualize和Dashboard,最终在Dashboard中,能够监控日志信息的页面为:

    以上,日志聚合分析的实现,就算完成了。

相关文章
相关标签/搜索