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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章