ELFK 開源日志平臺實戰部署之 Logstash
上一篇文章寫了ES集群部署,這篇文章將介紹和部署logstash。
整體實驗框架:
服務器信息:
IP | 角色 | 內存要求 |
10.0.0.41 | kibana+es集群節點1 | 建議2G或以上 |
10.0.0.42 | es集群節點2 | 建議2G或以上 |
10.0.0.43 | es集群節點3+logstash | 建議2G或以上 |
10.0.0.44 | filebeat+被采集日志的服務器 | 建議1G或以上 |
1. logstash簡介
logstash是一個開源的數據采集工具,通過數據源采集數據.然后進行過濾,并自定義格式輸出到目的地。
logstash可以采集任何格式的數據,當然我們這里主要是討論采集系統日志,服務日志等日志類型數據。
官方產品介紹:https://www.elastic.co/cn/products/logstash
2. logstash部署
我將logstash安裝在節點三:10.0.0.43
(1) 安裝jdk環境
在logstash服務器上確認openjdk安裝,前面已經安裝過了,可忽略
[root@elk03 ~]# java -version
openjdk version "11.0.27" 2025-04-15
OpenJDK Runtime Environment BiSheng (build 11.0.27+6)
OpenJDK 64-Bit Server VM BiSheng (build 11.0.27+6, mixed mode, sharing)
(2) 安裝logstash
在logstash服務器上傳并使用rpm安裝logstash**
[root@elk03 ~]# rpm -ivh logstash-8.18.2-x86_64.rpm
(3) 修改配置
修改logstash主配置文件,主要是數據和日志目錄
[root@elk03 ~]# grep -Ev "^$|^#" /etc/logstash/logstash.yml
path.data: /var/lib/logstash
path.logs: /var/log/logstash
(4) 對啟動命令做軟鏈接
[root@elk03 ~]# ln -s /usr/share/logstash/bin/logstash /bin/logstash
因為啟動命令不在$PATH環境變量中,所以做軟件到/bin/下方便直接使用
5. logstash測試
(1) 編寫測試配置文件
[root@elk03 ~]# vim /etc/logstash/conf.d/test.conf
input {
stdin {}
}
filter {
mutate {
add_field => { "source" => "logstash-manual-test" }
}
}
output {
elasticsearch {
hosts => ["http://10.0.0.41:9200"]
index => "logstash-test-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
配置說明:
- input{}與output{}必寫, filter{}可以不寫
- input中的stdin{}為眾多input插件中的一個,表示從標準輸入(也就是鍵盤輸入)收集數據
- output中的stdout{}為眾多output插件中的一個,表示收集的數據輸出到標準輸出(也就是當前終端)
(2) 啟動
[root@elk03 ~]# logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test.conf
參數說明:
- --path.settings 指定主配置文件目錄,不指定會有警告信息
- -f 指定收集數據配置文件
- 此命令啟動較慢,需要半分鐘左右。最后一句信息看到Successfully表示啟動成功
- 此命令沒有加后臺符號,會占用終端
(3) 測試結果
說明:
- 輸入任何信息都會成為message字段的值,并在當前終端顯示
- @timestamp,host,@version為默認添加的字段
(4) 關閉
測試完后,關閉。方法以下2種任選:
- ctrl+c 因為占用終端啟動,直接ctrl+c就可以關閉進程
- ps -ef |grep java查找進程pid,然后kill殺死進程
3. logstash采集日志
(1) 編寫收集日志配置文件
這里以/var/log/messages日志為例,只定義input輸入和output輸出,不考慮過濾
[root@elk03 ~]# vim /etc/logstash/conf.d/test2.conf
input {
file {
path => "/var/log/messages"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["10.0.0.41:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
說明:
- file是眾多input插件中的一個,用于收集本地日志文件
- path指定收集的日志路徑
- start_position => "beginning"表示從日志最開頭收集,默認是從最后收集
- elasticsearch是眾多output插件中的一個,用于將收集的數據輸出給elasticsearch
- hosts => ["10.0.0.41:9200"] 也可以指定多個es節點IP
- index指定收集后的索引名稱,+YYYY.MM.dd是日期,每天都會隨著時間變化而變化
(2) 啟動測試
[root@elk03 ~]# logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/test2.conf &
使用&符號方便啟動后可以繼續使用命令驗證.
(3) 驗證索引
查看日志文件條數:
[root@elk03 ~]# wc -l /var/log/messages
17056 /var/log/messages
(4) 查看es是否有日志
http://10.0.0.41:9200/_cat/indices?v
可以看到統計/var/log/messages的行數和es查看到的行數是一樣的,說明已經采集到了日志。
(5) 拓展驗證
- 索引里的docs數量會隨著日志增加而增加
- 即使關閉logstash進程,日志有變化,再啟動logstash進程也會把日志的更新都收集到ES。
4. logstash采集多日志源
[root@logstash ~]# vim /etc/logstash/conf.d/test.conf
input {
file {
path => "/var/log/messages"
start_position => "beginning"
type => "messages"
}
file {
path => "/var/log/yum.log"
start_position => "beginning"
type => "yum"
}
}
filter {
}
output {
if [type] == "messages" {
elasticsearch {
hosts => ["10.0.0.42:9200","10.0.0.41:9200","10.0.0.43:9200"]
index => "logstash-%{+YYYY-MM-dd}"
}
}
if [type] == "yum" {
elasticsearch {
hosts => ["10.0.0.42:9200","10.0.0.41:9200","10.0.0.43:9200"]
index => "logstash-yum-%{+YYYY-MM-dd}"
}
}
}
說明:
- 收集messages日志, 索引名為logstash-%{+YYYY-MM-dd}
- 收集yum日志,索引名為logstash-yum-%{+YYYY-MM-dd}
- /var/log/yum.log為空,是不會產生索引的。可以使用yum install XXX安裝軟件使yum日志產生記錄
5. logstash啟停操作
# 啟動并設置開機自啟動
systemctl enable --now logstash
# 停止
systemctl stop logstash
# 重啟
systemctl restart logstash
本篇將logstash作為采集,后續會用filebeat作為采集,logstash只做過濾。下一篇將講解kibana部署和使用,敬請關注!