Elastic日誌系統-filebeat-redis-logstash-elasticsearch-kibana-6.8.0搭建流程

搭建步驟

1. 需要準備的環境

系統環境

主機 軟件
192.168.100.104 elasticsearch, es-head, redis, logstash
192.168.100.105 filebeat, elasticsearch
192.168.100.106 elasticsearch, kibana, filebeat

系統版本CentOS Linux release 7.7.1908 (Core)

1.1 軟件版本

elastic系列爲6.8.0版本,使用rpm包安裝,簡單,方便管理。

1.2 軟件安裝

elastic系列軟件下載地址:https://www.elastic.co/cn/downloads/past-releases
這個地址可以下載各個版本的elastic系列軟件包。

點擊下載
elasticsearch下載
kibana下載
logstash下載
filebeat下載

將上面的rpm包下載好,上傳到指定主機,用yum命令安裝即可。

1.3 需求說明

  1. 所有日誌收集後,通過index進行區分;
  2. 不同的服務,輸出到不同的index中;
  3. 相同的服務,不在一個主機,也輸入到一個index進行管理。
  4. index按照時間滾動,只保留指定天數(比如7天)的index,防止不斷積累。

2. elasticsearch簡單配置

2.1 elasticsearch配置

es簡單配置如下

cluster.name: my-application   # 集羣名稱,3個節點的都要一樣
node.name: node-104  # 節點名
path.data: /var/lib/elasticsearch  # 數據存儲路徑
path.logs: /var/log/elasticsearch # 日誌輸出路徑
network.host: 192.168.100.104 # 主機IP
http.port: 9200  # 開放的端口
# 3節點
discovery.zen.ping.unicast.hosts: ["192.168.100.104:9300", "192.168.100.105:9300","192.168.100.106:9300"]

9200端口是http協議端口,主要用於外部通信
9300端口是tcp協議端口,主要用於集羣間傳遞信息
在每臺主機上修改好配置。啓動es

systemctl start elasticsearch
systemctl status elasticsearch

啓動成功後,可以通過api接口命令查看集羣狀態

curl http://192.168.100.104:9200
curl http://192.168.100.104:9200/_cat/nodes
curl http://192.168.100.104:9200/_cat/master

可以看到3節點都已經加到了集羣中,且104被選爲master。

2.2 es-head配置

需要配置nodejs環境。nodejs可以用yum安裝,或者用源碼安裝。

yum install epel-release git -y
yum install nodejs npm -y

下載源碼

cd /usr/local
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm install grunt --save

安裝

npm install -g grunt-cli  #安裝grunt命令行工具grunt-cli
npm install grunt --save-dev  #安裝grunt及其插件
grunt -version   #查看安裝版本情況

修改elasticsearch配置文件,增加如下字段

http.cors.enabled: true
http.cors.allow-origin: "*"

修改es配置可以只在es-head需要連接的那臺主機上進行。
修改elasticsearch-head目錄下的Gruntfile.js文件

#其中增加一段配置
hostname: '0.0.0.0' 或者是 hostname: '*'

在這裏插入圖片描述
如果有端口衝突的情況,也可以修改下面的監聽端口。
啓動es-head

cd /usr/local/elasticsearch-head/   # 注意,一定要進入代碼目錄下啓動,否則啓動不了
nohup grunt server > ./grunt.log 2>&1 &
netstat -tnulp|grep 9100  # 如果沒有端口衝突的情況,啓動不會有什麼異常

如果是長期使用es-head,可以考慮把它配置爲系統服務。
可以參考https://blog.csdn.net/wind_2307154495/article/details/79402911
啓動成功後就可以連接使用了。
在這裏插入圖片描述

3. kibana簡單配置

配置文件:/etc/kibana/kibana.yml

server.port: 5601
server.host: "192.168.100.106"
server.name: "elk-106"
elasticsearch.hosts: ["http://192.168.100.106:9200"]  # es地址
kibana.index: ".kibana"
logging.dest: /var/log/kibana.log # 日誌輸出路徑
i18n.locale: "zh-CN"   # 中文配置

注意:

  1. kibana如果不配置日誌輸出,一般日誌會輸出到/var/log/message裏面,導致系統日誌文件越來越大,且信息太多,難以區分,所以最好配置單獨的日誌輸出路徑。如果要配置日誌輸出路徑,特別要注意權限文件,執行以下命令
touch /var/log/kibana.log
chown kibana.kibana  /var/log/kibana.log
# 或者直接改權限
chmod 666 /var/log/kibana.log

登錄:http://192.168.100.106:5601
可以添加樣例數據。打開之後如下顯示:
在這裏插入圖片描述
es索引管理
在這裏插入圖片描述

4. elasticsearch配置用戶認證,權限管理(X-pack)

生產中,需要對es進行管理,首先要有權限管理配置,否則任何人,只要能訪問到es主機,知道端口,都可以對他進行管理操作,這是非常危險的。
如果是生產中,需要添加es認證,需要停服務,這個操作,需要提前跟開發溝通好,最好選擇業務低峯期。這樣對用戶的影響就非常小。

  1. 生成祕鑰,在主節點執行以下操作
/usr/share/elasticsearch/bin/elasticsearch-certutil ca
/usr/share/elasticsearch/bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 
mkdir /etc/elasticsearch/cert/
mv elastic-* /etc/elasticsearch/cert/
chmod 600 /etc/elasticsearch/cert/*
chown -R elasticsearch.elasticsearch /etc/elasticsearch/cert/elastic-*  # 更改權限

生成的配置文件elastic-certificates.p12需要copy到所有節點上/etc/elasticsearch/cert/目錄下,注意保存祕鑰密碼
2. 祕鑰密碼認證,在所有節點執行
這一步一定不能少,否則es會啓動報錯,啓動失敗

/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
/usr/share/elasticsearch/bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
  1. 所有節點增加如下配置

vim /etc/elasticsearch/elasticsearch.yml

# ---------------------------------- X-pack ------------------------------------
xpack.license.self_generated.type: basic
#
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: cert/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: cert/elastic-certificates.p12
#
#-------ellasticsearch-head-------------
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
  1. 重啓服務
sudo systemctl start elasticsearch.service
sudo systemctl status elasticsearch.service

要確保各節點服務啓動正常,上面的命令執行缺一不可,如果啓動異常可以通過日誌檢查錯誤。
5. 重啓之後,生成賬號密碼(在其中一臺上執行)

/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto

執行後會生成一些默認賬號的密碼:
在這裏插入圖片描述
6. 配置kibana,配置賬號密碼
增加如下配置段
在這裏插入圖片描述
配置完成後,重啓,重新刷新kibana頁面

sudo systemctl restart kibana.service

在這裏插入圖片描述
輸入你的賬號密碼既可以了。
常用的賬號已經配置到了es中
賬號配置流程:新建角色–>配置角色權限(集羣權限,索引權限,可以使用正則匹配)–>配置用戶(綁定角色)
配置角色權限也可以直接用已經配置好的角色,以權限角色運行。
角色權限參考:https://www.elastic.co/guide/en/elasticsearch/reference/6.8/security-privileges.html#privileges-list-cluster

爲了方便開發人員查看日誌,我們新建一個只讀賬號
在這裏插入圖片描述
在這裏插入圖片描述
索引權限,可以使用正則匹配。只給只讀權限。
如果是項目使用,在配置單獨索引的讀寫權限。
在這裏插入圖片描述
單個用戶,是可以選擇多個角色的。
使用新建用戶的賬號密碼登錄。可以看到,用戶看不到es的index界面,也不能修改kibana已經創建的索引。

下面是日誌傳送流程:
在這裏插入圖片描述

5. filebeat配置

/etc/filebeat/filebeat.yml

filebeat.inputs:
# 這一段是默認配置
- type: log
  enabled: false  # 是否啓用,默認不啓用
  paths:
    - /var/log/*.log
    
# 下面是我們自定義的配置
- type: log
  enable: true  # 啓用配置,收集日誌
  paths:
     - /tmp/002.txt # 日誌路徑,可以定義多個,可以使用正則
  tail_files: true # Filebeat從文件尾開始監控文件新增內容,非從頭開始
  document_type: "test-redis" #設定Elasticsearch輸出時的document的type字段 可以用來給日誌進行分類。Default: log

  fields_under_root: true
  fields:  # 下面是自定義字段,可以用來區分日誌類型,日誌信息
     log_type: "test-redis"
     service: "test-redis"
     
- type: log
  enable: true
  paths:
     - /tmp/003.txt # 這個是測試路徑,方便我們調試
  tail_files: true
  document_type: "testlog"
  exclude_files: ['.gz$']
  tags: "testlog"
  fields_under_root: true
  fields:
     log_type: "testlog"
     service: "testlog"

# java日誌收集
- type: log
  enable: true
  paths:
     - /tmp/logs/catalina*
  exclude_files: ['.gz$']
  exclude_lines: ['^$']
  tags: "java"

# 定義多行的情況
  multiline:
  # 這個匹配,根據日誌情況自定義
    pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'
    negate: true
    match: after
    max_lines: 1000
    timeout: 60
  fields_under_root: true
  fields:
     log_type: "java"
     service: "cms"

# 下面是輸出配置
# 具體配置參考官網:https://www.elastic.co/guide/en/beats/filebeat/current/redis-output.html
# 輸出中間,如果數據量不大的情況下,redis是很好的選擇,數據量很大,建議使用kafka集羣
output.redis:
  hosts: ["192.168.100.104:6379"]
  password: "changeme"   # redis一定要加上認證
  key: "filebeat" # 日誌發佈到的Redis列表或渠道的名稱
  db: 0
  timeout: 5 #連接超時時間

如何對filebeat蒐集的日誌進行區分,然後保存到不同的index裏面呢?
通過自定義字段

redis簡單配置
主要是下面兩個配置。

bind 192.168.100.104
requirepass changme

配置完成後,可以啓動服務了。

systemctl restart filebeat
systemctl restart redis

注意觀察日誌啊。

6. logstash配置

日誌通過filebeat到了redis,然後logstash從redis中取數據,輸出到es中,在這一部,我們要通過自定義的字段,把日誌輸出到不同的index中。
配置如下:
vim /etc/logstash/conf.d/redis.conf

注意:logstash配置文件路徑是/etc/logstash/conf.d/

# 從redis中拿數據
input {
   redis {
      data_type => "list"
      key => "filebeat"
      host => "192.168.100.104"
      port => "6379"
      password => "changme"
   }
}

# 輸出到es中
output {
   # 通過自定義字段fields.service判斷日誌是屬於哪個服務的,相同的服務輸出到一個index中
   if [service] {
        elasticsearch {
            hosts => ["192.168.100.104:9200","192.168.100.105:9200","192.168.100.106:9200"]
            user => "elastic"
            password => "changme"
            index => "logstash-%{service}-%{+YYYY.MM.dd}"
            http_compression => true
        }
   }
  # 如果沒有source字段匹配,就輸出到另一個公共的index中 
   else {
    elasticsearch {
        hosts => ["192.168.100.104:9200","192.168.100.105:9200","192.168.100.106:9200"]
        user => "elastic"
        password => "changme"
        index => "logstash-other-%{+YYYY.MM.dd}"
        http_compression => true
  }
  }
}

配置之後,可以先對配置文件進行測試,確認配置沒有問題

/usr/share/logstash/bin/logstash -t /etc/logstash/conf.d/redis.conf --debug

配置文件檢查沒有問題,重啓logstash服務

sudo systemctl restart logstash

7. 開始測試

現在所有服務都已經配置完了。我們開始測試。
剛纔在filebeat中定義了3個日誌輸入路徑:

/tmp/002.txt 對應service:test-redis
/tmp/003.txt 對應service:testlog
/tmp/logs/catalina* 對應service:cms
寫入日誌到這些測試文件中。可以看到已經有index了
在這裏插入圖片描述
然後創建kibana的索引,方便進行查看
在這裏插入圖片描述
在這裏插入圖片描述
創建完索引之後,就可以在Discover裏面看到了
在這裏插入圖片描述
在這裏插入圖片描述
其它幾個kibana索引的創建方式。參考上面的即可。

至此,所有流程就全部打通了。
後面需要做的工作:

  1. nginx接入進來,展示nginx信息,站點訪問情況,狀態碼等等
  2. es的index要按照日期,定時刪除

es的定期刪除策略

可以參考如下腳本:

# 保留15天內日誌索引
date=$(date -d "-15 days" "+%Y.%m.%d")
# 獲取要刪除的索引
delete_index=$(curl -s -u elastic:l7oTPEalirnWNBZHnuWt http://192.168.100.104:9200/_cat/indices|grep test|grep ${date} |awk '{print $3}')

#
for index in ${delete_index}
do
   #echo $index
   curl -XDELETE -u elastic:changme http://192.168.100.104:9200/$index
done

使用es的定期刪除策略

  1. 配置生命週期管理:3天后刪除在這裏插入圖片描述在這裏插入圖片描述
  2. 配置索引模板,引用策略
    在kibana的開發工具中操作
PUT _template/logs_template
{
  "index_patterns": ["logs-*"],   # 匹配所有以logs開頭的索引
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "delete-3day",      
    "index.lifecycle.rollover_alias": "logs"    
  }
}

參考:
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/_applying_a_policy_to_our_index.html
注意:只有新索引會自動綁定策略,原來的不會變化,還是需要手動綁定

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