1. 程式人生 > 實用技巧 >ELK搭建&Logstash 日誌收集

ELK搭建&Logstash 日誌收集

1.ES搭建

2.搭建 Logstash

1)安裝java環境

1.上傳java包
2.安裝Java環境

2)時間同步

[root@web01 ~]# ntpdate time1.aliyun.com

3)安裝Logstash

1.上傳包
[root@web01 ~]# rz logstash-6.6.0.rpm

2.安裝
[root@web01 ~]# rpm -ivh logstash-6.6.0.rpm

3.授權
[root@web01 ~]# chown -R logstash.logstash /usr/share/logstash/

# 啟動程式
/usr/share/logstash/bin/logstash

3.logstash介紹

1)輸入輸出外掛介紹

INPUT、OUTPUT外掛
INPUT:外掛使Logstash收集指定源的日誌
OUTPUT:外掛將事件資料傳送到特定的目的地
INPUT支援事件源 OUTPUT支援輸出源 CODEC編解碼器支援編碼
azure_event_hubs(微軟雲事件中心) elasticsearch(搜尋引擎資料庫) avro(資料序列化)
beats(filebeat日誌收集工具) email(郵件) CEF(嵌入式框架)
elasticsearch(搜尋引擎資料庫) file(檔案) es_bulk(ES中的bulk api)
file(檔案) http(超文字傳輸協議) Json(資料序列化、格式化)
generator(生成器) kafka(基於java的訊息佇列) Json_lines(便於儲存結構化)
heartbeat(高可用軟體) rabbitmq(訊息佇列 OpenStack) line(行)
http_poller(http api) redis(快取、訊息佇列、NoSQL) multiline(多行匹配)
jdbc(java連線資料庫的驅動) s3*(儲存) plain(純文字,事件間無間隔)
kafka(基於java的訊息佇列) stdout(標準輸出) rubydebug(ruby語法格式)
rabbitmq(訊息佇列 OpenStack) tcp(傳輸控制協議)
redis(快取、訊息佇列、NoSQL) udp(使用者資料報協議)
s3*(儲存)
stdin(標準輸入)
syslog(系統日誌)
tcp(傳輸控制協議)
udp(使用者資料報協議)

2)Logstash輸入輸出測試

# 配置環境變數
[root@web01 ~]# vim /etc/profile.d/logstash.sh
export PATH=/usr/share/logstash/bin/:$PATH

# 收集標準輸入到標準輸出測試
[root@web01 ~]# logstash -e 'input { stdin {} } output { stdout {} }'

# 測試輸入
123456
{
	#時間戳
    "@timestamp" => 2020-08-13T01:34:24.430Z,
    	  #主機
          "host" => "web01",
      #版本
      "@version" => "1",
       #內容
       "message" => "123456"
}

# 收集標準輸入到標準輸出指定格式
[root@web01 ~]# logstash -e 'input { stdin {} } output { stdout { codec => rubydebug } }'
123456
{
       "message" => "123456",
      "@version" => "1",
    "@timestamp" => 2020-08-13T01:39:40.837Z,
          "host" => "web01"
}

3)Logstash收集標準輸入到檔案

# 收集標準輸入到檔案
[root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/test.txt" } }'

# 收集標準輸入到檔案
[root@web01 ~]# logstash -e 'input { stdin {} } output { file { path => "/tmp/test_%{+YYYY-MM-dd}.txt" } }'

4)Logstash收集標準輸入到ES

# 收集標準輸入到ES
[root@web01 ~]# logstash -e 'input { stdin {} } output { elasticsearch { hosts => ["10.0.0.51:9200"] index => "test_%{+YYYY-MM-dd}" } }'

# 隨便輸入些內容

# 檢視頁面

4.Logstash使用

Logstash是一個開源的資料收集引擎,可以水平伸縮,而且logstash整個ELK當中擁有最多外掛的一個元件,其可以接收來自不同來源的資料並統一輸出到指定的且可以是多個不同目的地。

1.logstash的配置檔案

# 預設的配置檔案
/etc/logstash/logstash.yml

#一般不使用,只有用system管理時才使用

2.收集檔案中的日誌到檔案
1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/message_file.conf
input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}
output {
  file {
    path => "/tmp/message_file_%{+YYYY-MM-dd}.log"
  }
}

2)啟動

# 檢測配置
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf -t

# 啟動
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf

3)檢視是否生成檔案

[root@web01 tmp]# ll
total 4
-rw-r--r-- 1 root root 1050 Aug 13 11:24 message_file_2020-08-13.log

5.收集檔案中的日誌到ES

1)配置

[root@web01 ~]# vim /etc/logstash/conf.d/message_es.conf
input {
  file {
    path => "/var/log/messages"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["10.0.0.51:9200","10.0.0.52:9200","10.0.0.53:9200"]
    index => "message_es_%{+YYYY-MM-dd}"
  }
}

2)啟動

[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf

3)檢視頁面

6.啟動多個logstash收集日誌

1)建立多個數據目錄

[root@web01 ~]# mkdir /data/logstash/{message_file,message_es} -p

# 授權
[root@web01 ~]# chown -R logstash.logstash /data/

2)啟動時指定資料目錄

[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_es.conf --path.data=/data/logstash/message_es &
[1] 18693
[root@web01 ~]# logstash -f /etc/logstash/conf.d/message_file.conf --path.data=/data/logstash/message_file &
[2] 18747

3)驗證

檢視檔案和ES頁面

7.一個logstash收集多個日誌

[root@web01 ~]# vim /etc/logstash/conf.d/more_file.conf

input {
  file {
    type => "messages_log"
    path => "/var/log/messages"
    start_position => "beginning"
  }
  file {
    type => "secure_log"
    path => "/var/log/secure"
    start_position => "beginning"
  }
}
output {
  if [type] == "messages_log" {
    file {
      path => "/tmp/messages_%{+YYYY-MM-dd}"
    }
  }
  if [type] == "secure_log" {
    file {
      path => "/tmp/secure_%{+YYYY-MM-dd}"
    }
  }
}
# 如果資源充足,可以使用多例項收集多日誌,如果伺服器資源不足,啟動不了多例項,配置一個檔案收集多日誌啟動