ELFK自定義安裝,並收集nginx日誌-淺入淺出
參考文檔
概述
ELFK官網下載地址
Fliebeat爲客戶端。
Logstash+Elastsearch+Kibana 爲服務端。(本文Elasticsearch沒有做集羣,而是單節點,後期考慮集羣)
例如業務服務器上面只需要安裝客戶端就行了,filebeat只需要將指定日誌文件中的數據傳輸到服務端即可,資源消耗小,輕量級。這樣可以儘可能不影響業務端上的業務程序。
而且ELK服務端即使掛了也不會影響到業務端。
部署架構圖大致如下
Logstash和filebeat是什麼關係
Lf關係原文鏈接
因爲logstash是jvm跑的,資源消耗比較大,所以後來作者又用golang寫了一個功能較少但是資源消耗也小的輕量級的logstash-forwarder。不過作者只是一個人,加入http://elastic.co公司以後,因爲es公司本身還收購了另一個開源項目packetbeat,而這個項目專門就是用golang的,有整個團隊,所以es公司乾脆把logstash-forwarder的開發工作也合併到同一個golang團隊來搞,於是新的項目就叫filebeat了。
logstash 和filebeat都具有日誌收集功能,filebeat更輕量,佔用資源更少,但logstash 具有filter功能,能過濾分析日誌。一般結構都是filebeat採集日誌,然後發送到消息隊列,redis,kafaka。然後logstash去獲取,利用filter功能過濾分析,然後存儲到elasticsearch中。
服務端環境
Centos7 4核16G
創建對應目錄目錄以及用戶,Elastic Search啓動:由於ES的啓動不能用root賬號直接啓動,需要新創建用戶,然後切換新用戶去啓動,接下來都以elsearch用戶操作
useradd elsearch
mkdir -p /data/elk && cd /data/elk
chown -R elsearch.elsearch /data/elk
su - elsearch
JDK
下載地址
java環境變量就不再詳細闡述,jdk版本需要大於1.8
Elastsearch
cd /data/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar.gz
tar -xvf elasticsearch-7.3.2 && mv elasticsearch-7.3.2 elasticsearch
編輯配置
修改elasticsearch/config/elasticsearch.yml添加或修改以下內容
#es名稱
cluster.name: my_es_cluster
#節點名稱
node.name: elk
#索引數據存放地址
path.data: /data/elk/elasticsearch/data
#es日誌存放地址
path.logs: /data/elk/elasticsearch/logs
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 配置白名單 0.0.0.0表示其他機器都可訪問
network.host: 0.0.0.0
transport.tcp.port: 9300
#tcp 傳輸壓縮
transport.tcp.compress: true
#綁定端口
http.port: 9200
discovery.zen.ping.unicast.hosts: ["elk"]
啓動Elasticsearch
/data/elk/elasticsearch/bin/elasticsearch &
啓動報錯
啓動過程中,會出現一些報錯信息,如:
1、max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解決問題(1):將當前用戶的軟硬限制調大。
– 切換到root用戶
修改**/etc/security/limits.conf**添加或修改以下內容
* soft nproc 65536
* hard nproc 65536
* soft nofile 65536
* hard nofile 65536
– 保存退出
– 不需要重啓,重新登錄即生效
– 查看修改命名是否生效
ulimit -n
– 結果65536
ulimit -H -n
– 結果65536
解決問題(2):調大elasticsearch用戶擁有的內存權限
sysctl -w vm.max_map_count=262144
– 查看修改結果
sysctl -a|grep vm.max_map_count
– 結果顯示:vm.max_map_count = 262144
– 永久生效設置
修改/etc/sysctl.conf添加或修改以下內容
vm.max_map_count=262144
保存後執行命令
sysctl -p
–再切換回elsearch用戶
再次啓動Elasticsearch
/data/elk/elasticsearch/bin/elasticsearch &
訪問Elasticsearch
若訪問不了,優先關閉防火牆測試
訪問結果是一串json,說明啓動成功了。
#訪問地址
http//IP:9200
Kibana
下載指南
下載並解壓,修改名字
cd /data/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-linux-x86_64.tar.gz
tar -xvf kibana-7.3.2-linux-x86_64.tar.gz && mv kibana-7.3.2-linux-x86_64 kibana
編輯配置
vim kibana/config/kibana.yml
最下方修改或添加
#漢化
i18n.locale: "zh-CN"
#kibana監聽端口
server.port: 5601
#默認內外網都可以訪問
server.host: "0.0.0.0"
#elasticsearch.hosts內部訪問地址
elasticsearch.hosts: ["http://localhost:9200"]
kibana.index: ".kibana"
由於 kibana5.* 6.* 官方並沒有支持中文,需要另外下載補丁包 推薦下面這個 ↓
https://github.com/anbai-inc/Kibana_Hanization
不過我這邊下載的是7.*的版本,故直接修改配置文件即可,中文包在下面這個路徑↓
找不到的就通過find搜索或locate也行 不過大概瞭解即可,這裏就不在過多闡述。
kibana/node_modules/x-pack/plugins/translations/translations/zh-CN.jso
啓動Kibana
/data/elk/kibana/bin/kibana &
訪問Kibana
#訪問地址
http://IP:5601
若訪問不了,優先關閉防火牆測試
Logstash
cd /data/elk
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.tar.gz
tar -xvf logstash-7.3.2.tar.gz && mv logstash-7.3.2 logstash
編輯配置
默認無需改動,只需將logstash-sample.conf命名爲logstash.conf即可
cp logstash/config/logstash-sample.conf logstash/config/logstash.conf
啓動Logstash
–config.reload.automatic項會定期自動重載配置,可以不停止重啓Logstash就可以修改配置。
/data/elk/logstash/bin/logstash -f /data/elk/logstash/config/logstash.conf --config.reload.automatic
客戶端安裝Filebeat,並以收集nginx日誌爲例
mkdir -p /data && cd /data/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-linux-x86_64.tar.gz
tar -xvf filebeat-7.3.2-linux-x86_64.tar.gz && mv filebeat-7.3.2-linux-x86_64 filebeat
cd filebeat
編輯配置
修改** filebeat.yml** 以設置連接信息:
output.logstash:
# The Logstash hosts
#hosts: ["localhost:5044"]
#修改爲自己服務端的logstash ip:端口
hosts: ["192.168.2.199:5044"]
在filebeat.inputs段中添加下列信息:
- type: log
enabled: true
paths:
#也可以是其他程序日誌
- /var/log/nginx/access.log
fields:
#也可以其他索引名
log_source: nginx-access
#------------------------------------
- type: log
enabled: true
paths:
#也可以是其他程序日誌
- /var/log/nginx/error.log
fields:
#也可以其他索引名
log_source: nginx-error
啓動filebeat
nohup ./filebeat -e -c filebeat.yml >> logs/start.log 2> logs/error.log &
服務端logstash配置文件修改
修改** logstash.conf **以設置連接信息:
output {
# filebeat傳輸過來的index名
if "nginx-access" in [fields][log_source] {
elasticsearch {
#elasticsearch的ip:監聽端口
hosts => ["http://localhost:9200"]
index => "nginx-access-%{+YYYY.MM}"
# index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
# filebeat傳輸過來的index名
if "nginx-error" in [fields][log_source] {
elasticsearch {
#elasticsearch的ip:監聽端口
hosts => ["http://localhost:9200"]
index => "nginx-error-%{+YYYY.MM}"
# index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
}
因爲之前在啓動服務端logstash的時候,添加了這個參數**–config.reload.automatic項會定期自動重載配置**,可以不停止重啓Logstash就可以修改配置。故無需做任何操作(也可以手動kill再啓動logstash)
kibana上配置新增索引
訪問服務端的kibana
http://服務端IP:5601
點擊索引模式
創建索引,輸入filebeat中定義的nginx-access
點擊下一步
選擇timestamp>>>創建索引模式即可
創建完成後回到discover發現
這時候直接看日誌可能看不懂,沒關係,點擊字段,根據字段索引列出日誌
選擇message簡介明瞭。over。就可以看到nginx的access日誌了!
完成所有步驟後,通過自己需求,便可以隨時瀏覽自己的數據,這邊我沒有在logstash上做過濾操作,有需要的請自行google。
測試情況
在國慶前,通過zabbix監控 ELK服務端 以及 F客戶端 服務器的資源佔用情況,至今情況來看,比較明顯的是,
客戶端Filebeat在產生filebeat收集的日誌的時候,CPU以及 帶寬佔用 。有明顯增長。(進程爲filebeat)
服務端ELK在收集filebeat日誌的時候,CPU以及 帶寬佔用 。有明顯增長。(進程主要爲elasticsearch)