使用docker-compose 快速搭建elk


  • 前置條件 安裝好docker 和docker-compose 
  • 首先將 https://github.com/deviantony/docker-elk 克隆到本地 
  • 打開文件目錄 docker-elk\kibana\config\kibana.yml 文件 修改登錄賬號密碼
    ---
    ## Default Kibana configuration from Kibana base image.
    ## https://github.com/elastic/kibana/blob/master/src/dev/build/tasks/os_packages/docker_generator/templates/kibana_yml.template.ts
    #
    server.name: kibana
    server.host: 0.0.0.0
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    monitoring.ui.container.elasticsearch.enabled: true
    
    ## X-Pack security credentials
    #修改登錄賬號密碼
    elasticsearch.username: elastic
    elasticsearch.password: changeme
    ## 將Kinbana 界面設置成中文 如果習慣英文可以刪除此配置默認是英文配置
    i18n.locale: "zh-CN"

     

  • 打開docker-compose.yml 文件修改es密碼
  •  轉到clone 跟目錄執行 

    docker-compose up

     雖然官方貌似已經默認推薦使用filebeat 進行日志收集 ,奈何這個教程實在無腦先上之后再研究看看filebeat 。還有就是logstash filter 做日志過濾很方便,貌似filebeat 還不支持。所以先玩一下elk

  • 一些其他問題  elk 寫入日志時 時間查詢總是對不上結果發現是本地發送日志機器和服務器的時間差七分鍾。  所以入es 的時間是服務器時間。kinbana的時區又默認是瀏覽器的時間也就是我本機。所以日志沒有實時而是有七分鍾的差距。image.png
    #liunx校准時間
    yum install -y ntp
    
    ntpdate cn.pool.ntp.org

     

  • 使用logstash 過濾字段腳本(把 key=value#key2=value2 變成多字段)
    //Nlog 配置如下    
    <target xsi:type="Network" name="ownLog-tcp" keepConnection="false" address ="tcp://192.168.3.10:5000" layout="node=${nodeName}#time=${longdate}#env=${aspnet-environment}#host=${aspnet-request-host}#url=${aspnet-request-url}#method=${aspnet-request-method}#level=${uppercase:${level}}#caller=${callsite}#linenumber=${callsite-linenumber}#msg=${message}#exception=${exception:format=ToString}#requestId=${requestId}#userflag=${userflag}#platformId=${platformId}#duration=${aspnet-request-duration}" />
    解析配置的logstash 過濾器
    
    input {
        beats {
            port => 5044
        }
    
        tcp {
            port => 5000
        }
    }
    
    ## Add your filters / logstash plugins configuration here
    
    filter {
        ruby {
            code => "
                array1 = event.get('message').split('#')
                array1.each do |temp1|
                    if temp1.nil? then
                        next
                    end
                    array2 = temp1.split('=')
                    key = array2[0]
                    value = array2[1]
                    if key.nil? then
                        next
                    end
                    event.set(key, value)
                end
            "
            remove_field => [ "message" ]
        }
    }
    
    output {
        elasticsearch {
            hosts => "elasticsearch:9200"
            user => "elastic"
            password => "changeme"
            ecs_compatibility => disabled
        }
    }

     

  •  這樣就把message拆分成多個查詢字段

     

    image.pngimage.png

  • kinbana 一次顯示兩條日志 _id 不同 。  檢查pipline 文件夾下是否有多個logstash 備份文件
  • es 記錄多條日志 : message 記錄日志的時候每一個回車換行都會當成一個新的指令執行到es里面  這里需要用到logstash 的multiline 插件 
    •  首先進入到容器中更換Gem 源地址  然后安裝multiline 插件 
      #首先把第一行source 換成中國節點的地址https://gems.ruby-china.com/
      vi /opt/logstash/Gemfile 
      #安裝multiline插件
      logstash-plugin install logstash-filter-multiline
      logstash-plugin install logstash-codec-multiline

       

    •  更改pipline 文件夾目錄下conf文件 ( /opt/logstash/pipeline/logstash.conf)

      在filter 節點下添加
      multiline {
              pattern => "^#" //匹配正則為#開頭的
              negate => true
              what => "previous"
              }

       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM