iT邦幫忙

0

ELK logstash 問題

我使用了 Docker 架設了 ELK,但是我目前實驗是將所有 VMware 上的虛擬機 log 傳入 rsyslog 514 Port,接著在傳入 logstash 。雖然 kibana 那邊都有收到,但我要如何將 VMware 上的虛擬機用 logstash 做分類(web 專用的或者 SQL 專用的)。

2 個回答

0
跑跑貓力歐
iT邦新手 5 級 ‧ 2018-05-15 11:06:20

Logstash可以用if-else來作filter或output(官網說明),如果要區分Web專用或者SQL專用,需要特定pattern可以用來當作if-else判斷的依據,支援一般比對、regex模糊比對和。

假設虛擬機log裡會帶host名稱或種類,且可以用來判斷為Web或SQL (如:ldpweb01, lddweb02, prodsql01, prodsql02),則可以這樣寫:

filter{
  if [host] =~ /.*web.*/ {
    mutate { add_field => { "[log_type]" => "web" } }
  }
  if [host] =~ /.*sql.*/ {
    mutate { add_field => { "[log_type]" => "sql" } }
  }
}

如果符合if condition,logstash會在message裡加入一個log_type的欄位,那在kibana呈現時就當作query條件或是當作metric的x or y軸。

chichi iT邦新手 5 級 ‧ 2018-05-24 16:29:16 檢舉

了解,我在試試

0
Pallas
iT邦新手 3 級 ‧ 2019-12-22 17:29:55

教你一個更有效率的方法

  1. 你會知道丟訊息過來 VM 的 IP 吧!
  2. 你會知道丟訊息過來 VM 的種類吧! (web, sql, test ....)

在 /etc/logstash/ 下建立一個清單文件
vi device_list.yaml
"10.1.1.123": "web"
"10.1.1.124": "web"
"10.1.1.125": "sql"
"10.1.1.126": "test"

改寫一下 conf.d/xxx.conf
filter {
.....
translate {
field => "host"
destination => "device_type"
dictionary_path => '/etc/logstash/device_list.yaml'
refresh_interval => '300'
}
.....

這樣就能依據原來的 vm 作簡單的分類,「device_type」是新的辨視欄位

我要發表回答

立即登入回答