- 前置條件 安裝好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的時區又默認是瀏覽器的時間也就是我本機。所以日志沒有實時而是有七分鍾的差距。
#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拆分成多個查詢字段
- 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" }
- 首先進入到容器中更換Gem 源地址 然后安裝multiline 插件