現ELK四大組件分別爲:Elasticsearch(核心)、logstash(處理)、filebeat(採集)、kibana(可視化)node
下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會快一點點python
注意:「如若後續用到sentinl(開源監控警報插件,可webhook接釘釘等),ELK的組件版本應選擇與sentinl版本一致,sentinl版本比ELK組件更新慢」linux
個人杯具:Plugin sentinl [7.6.1] is incompatible with Kibana [7.9.0]git
linux mint19github
自帶open jdk 11 ( 不能低於1.8 )web
主目錄建立itcast,而後分配權限,本機使用user0正則表達式
chown -R user0:user0 /itcast
本機配置:tar包全解壓至 /itcast/ 修改如下配置文件(注意Tab距離以默認文件爲主)跨域
/itcast/(elasticsearch解壓目錄)/config/elasticsearch.yml安全
# 集羣名稱,默認是elasticsearch cluster.name: my-application # 節點名稱 node.name:node-1 # 配置IP端口 network.host:0.0.0.0 http.port: 9200 # 能夠指定es的數據存儲目錄,默認存儲在es_home/data目錄下 # path.data: /path/to/data # 能夠指定es的日誌存儲目錄,默認存儲在es_home/logs目錄下 # path.logs: /path/to/logs # 子集羣節點,用的上述節點設置的名稱 discovery.seed_hosts:[node-1] # !!經過配置這個參數來防止集羣腦裂現象 (集羣總節點數量/2)+1 discovery.zen.minimum_master_nodes= ( master候選節點數量/2+1 ) # 處理跨域的相關參數 http.cors.enabled: true http.cors.allow-origin: "*" http.cors.allow-methods: OPTIONS, HEAD, GET, POST, PUT, DELETE http.cors.allow-headers: "X-Reqested-With, Content-Type, Content-Length, X-User"
/itcast/(kibana解壓目錄)/config/kibana.ymlapp
server.port: 5601 server.host: "0.0.0.0" elasticsearch.hosts: ["http://192.168.199.224:9200"] kibana.index: ".kibana" # 自定義安全參數 xpack.encryptedSavedObjects.encryptionKey:encryptedSavedObjects12345678909876543210123 xpack.security.encryptionKey: encryptionKeysecurity12345678909876543210123 xpack.reporting.encryptionKey: encryptionKeyreporting12345678909876543210123 elasticsearch.requestTimeout: 90000 i18n.locale: "zh-CN"
/itcast/(logstash解壓目錄)/config/logstash-sample.conf
input { beats { port => 5044 } } filter { # 重要功能,對日誌處理均在此步,自行按需搜索 mutate { split => {"message" => "|"} } mutate { add_field => { "Date" => "%{[message][0]}" # 坑點!!!新版本中%{}裏字段如message須要加上中括號[]做爲識別 "Level" => "%{[message][1]}" "result" => "%{[message][2]}" } } mutate { convert => { "Date" => "string" "Leverl" => "string" "result" => "string" } } } output { elasticsearch { hosts => ["http://192.168.199.224:9200"] index => "logstash-%{+YYYY.MM.dd}" } }
/itcast/(filebeat解壓目錄)/filebeat.yml
filebeat.inputs: - type: log enabled: true paths: #目標文件,自行匹配 - /var/log/*.log #- /itcast/elasticsearch/logs/* tags: ["spider"] #不須要logstash處理可直接傳ela自己 #output.elasticsearch: # hosts: ["192.168.199.224:9200"] out.logstash: hosts: ["192.168.199.224:5044"] filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 1 setup.kibana: host: "192.168.199.224:5601"
sentinl插件安裝(按需)
(kibana目錄)/bin/kibana-plugin install file:~/sentinl-v7.6.1.zip # zip包自行github尋找
/etc/security/limits.conf 尾部加上字段
* soft nproc 65536 * hard nproc 65536 * soft nofile 65536 * hard nofile 65536
# 執行命令 su - user0 ulimit -n # 返回65536即設置成功
用 ufw 開啓有關端口:es、kibana、logstash ( 實際看業務執行的主機的 filebeat 配置會用到什麼端口)
sudo ufw allow 9200 sudo ufw allow 5601 sudo ufw allow 5044 sudo ufe enable
運行elasticsearch,此須要切換到user0
su - user0
cd /itcast/(elasticsearch解壓目錄) ./bin/elasticsearch
運行另外的組件( 實際 filebeat 在業務運行的主機上運行)
cd /itcast/(kibana解壓目錄) ./bin/kibana
cd /itcast/(logstash解壓目錄) ./bin/logstash -f ./config/logstash-sample.conf
cd /itcast/(filebeat解壓目錄) ./filebeat -e -c filebeat.yml
新建控制檯,cd至 filebeat 監控日誌目錄,此處爲 /var/log
重複執行如下命令
echo "2020-09-01 | DEBUG | create a logmsg demo" >> demo.log
打開kibana(此處爲192.168.199.224:5601)>>
菜單打開Stack Management( 管理中心 )>>
kibana索引模式建立索引( logstash 的配置輸出中 index => "logstash-%{+YYYY.MM.dd}" ),此處輸入 logstash-* 便可 >>
菜單打開 discover,建立新條目,選擇上一步的索引,調整時間段便可返回相關數據
菜單打開日誌,選擇索引 logstash-* 亦可返回流式數據
# 安裝插件
./bin/logstash-plugin install logstash-filter-multiline
# logstash-simple.conf中的filter里加入
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
# multiline {
# charset=>... #可選 字符編碼
# max_bytes=>... #可選 bytes類型 設置最大的字節數
# max_lines=>... #可選 number類型 設置最大的行數,默認是500行
# multiline_tag... #可選 string類型 設置一個事件標籤,默認是multiline
# pattern=>... #必選 string類型 設置匹配的正則表達式
# patterns_dir=>... #可選 array類型 能夠設置多個正則表達式
# negate=>... #可選 boolean類型 默認false不顯示,可設置ture
# what=>... #必選 向前previous , 向後 next
#
# }