docker-compose 搭建ELK spring-boot

2020-02-28  本文已影响0人  dsjaikdnsajdnua

docker-compose 搭建ELK

本文主要是参考别人博客,并迭代记录一些原文没有遇到或者说明的问题,供自己以后有相关问题来查看,并分享给大家

个人而言,docker-compose 相对 docker 分开部署简单,可以一步到位。所以选择docker-compose搭建。

如果有遇到什么问题,请查看最后的问题记录!

环境说明

​ 云机-Debian10

docker 安装

​ 请参考:https://www.runoob.com/docker/debian-docker-install.html,讲的非常好!

docker-compose安装

​ 请参考:https://www.runoob.com/docker/docker-compose.html,这里我也再次说明一下吧。<u>主要解决服务器从github下载会很慢的问题。所以下面将直接从github下载,再复制到服务器上</u>

  1. 直接从github安装

    下载地址:https://github.com/docker/compose/releases,选定一个版本然后下载。

  2. 下载docker-compose-Linux-x86_64 linux的版本

1582798022(1).jpg
  1. 将下载的文件复制到云机上(使用scp或者用图形化界面都可以)

    scp ./docker-compose-Linux-x86_64 root@192.168.1.13:/usr/local/bin/docker-compose
    
  2. 赋予可执行权限

    如何debian提示sudo command not found,直接不用sudo或者安装一个:apt-get install sudo

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. 创建软链

    sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
    
  4. 测试安装是否成功

    docker-compose --version
    

安装ELK环境

各个服务端口运行情况如下:

名称 端口 说明
Logstash TCP input 5000 用于应用传入数据进入logstash的端口
Elasticsearch HTTP 9200 是ES节点与外部通讯使用的端口。它是http协议的RESTful接口;各种CRUD操作都是走的该端口,如查询:http://localhost:9200/user/_search
Elasticsearch TCP transport 9300 是ES节点之间通讯使用的端口。它是tcp通讯端口,集群间和TCPclient都走的它。java程序中使用ES时,在配置文件中要配置该端口
Kibana 5601 Kibana的Web界面入口
1582877894(1).jpg

​ 创建index_patterns

1582878470(1).jpg

​ 接下来,在index pattern框中填入上述创建ElK时logstash配置文件中的index信息:data-http-*

1582878795(1).jpg

注意!如果ES没有数据是无法添加索引的!所以要确保之前的操作能够成功,如果不能写入,请查看文章最下面的参考。

​ 选择@timestamp字段作为时间筛选字段。

1582878988(1).jpg

​ 点击最上面的指南针的图标(Discover),然后选中data-http*索引就能够看到对应的日志了。

1582879209(1).jpg

以上,spring-boot结合ELK的系统就搭建完成了!

错误记录

我在搭建的过程中,遇到了以下的坑,浪费了我比较多时间

  1. spring-boot无法写入logstash,但是spring-boot应用能正常启动,Kibana页面能够正常访问。

    这种情况,一般不会是应用的问题,因为应用部分配置非常简单!就算有错,在启动的时候也会非常明显,所以很有可能就是在ELK服务那边。

    查看ELK日志

    这一点,很重要!我就是一个个ELK服务看日志,才发现了问题,日志体现如下:不断的刷日志;出现以下错误:

    [2020-02-28T08:46:26,997][ERROR][io.netty.util.concurrent.DefaultPromise.rejectedExecution] Failed to submit a listener notification task. Event loop shut down?
    java.util.concurrent.RejectedExecutionException: event executor terminated
    

    以上的日志的原因是,貌似有多个logstash实例同时启动在同一端口,导致了死循环。可以参考:https://github.com/elastic/elasticsearch/issues/27226,上面说In case anyone (like me) lands here with the same error: check that you're not trying to run multiple instances of Logstash on the same port!

    对于我,原因如下:

    我把原来的logstash的配置备份一份,文件结构如下:

    logstash.conf logstash.conf.bak

    于是,我就把logstash.conf.bak删除,再启动就可以了!

  2. logstash启动失败,logstash连接es失败

    日志表现如下:

    [2020-02-27T08:34:46,451][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>"http://elasticsearch:9200/", :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '401' contacting Elasticsearch at URL 'http://elasticsearch:9200/'"}
    

    解决方案:修改logstash.conf文件,添加es的权限验证信息

    vi /home/xijie/app/myelk/dokcer-elk/logstash/pipeline/logstash.conf
    

    内容如下:

    input{
            tcp {
                    mode => "server"
                    port => 5000
                    codec => json_lines
                    tags => ["data-http"]
            }
    }
    filter{
        json{
            source => "message"
            remove_field => ["message"]
        }
    }
    output{
        if "data-http" in [tags]{
            elasticsearch{
                hosts=> ["elasticsearch:9200"]
                index => "data-http-%{+YYYY.MM.dd}"
                user => "elastic"
                password => "changeme"
            }
            stdout{codec => rubydebug}
        }
    }
    

    以上关键在于,添加了es的user和password:

     elasticsearch{
         hosts=> ["elasticsearch:9200"]
         index => "data-http-%{+YYYY.MM.dd}"
         user => "elastic"
         password => "changeme"
     }
    

    总结

    ​ 通过docker-compose能够快速的搭建ELK环境,然后再通过logstash的jar可以非常方便的将应用的日志推送到logstash,下面我会继续熟悉Kibana的使用。

    参考

    docker部署ELK(logstash、elasticsearch、kibana),监控日志
    https://github.com/deviantony/docker-elk/issues/446

上一篇下一篇

猜你喜欢

热点阅读