ELK提高篇之Logstash


二、Logstash

2.1、安裝logstash

logstash依賴java 8或 java 11,也可以使用OpenJDK,在進行安裝時,我們需要聲明JAVA_HOME的環境變量,以保證正常地安裝。這里我們采用OpenJDK的方式,更為簡潔。

[root@elk ~]# java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

YUM安裝方式:

# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

#增加logstash源到yum倉庫/etc/yum.repos.d/
[logstash-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# yum install logstash

Logstash的工作原理圖:

1567733408929

標准的輸入輸出測試:

/usr/share/logstash/bin/logstash -e 'input {stdin {} } output { stdout {} }'
hello

2.2、Logstash的工作原理解析

Logstash進行數據采集和流水線處理主要有三個步驟:inputs --> filters --> outputs

inputs負責定義數據采集的來源,filters進行自定義的過濾日志的規則,outputs是將日志輸出到日志的存儲區域,如elasticsearch存儲。

inputs和outputs都支持對數據的格式進行編碼和解碼操作。

  • Inputs

    inputs支持多種數據采集的方式,常用的方式有以下幾種:

    file:直接讀取日志文件,類似命令行執行tailf查看日志

    syslog:通過514端口進行監聽syslog日志信息

    redis:從redis服務器集群中讀取日志,redis通常會作為一個中間運輸層,以降低logstash日志處理的壓力

    beats:是一種輕量級的日志收集方式

  • Filters

    Filters是logstash日志收集中的過濾處理層,常用的過濾器包含以下幾種:

    grok:解析和構建任意文本,通俗地說就是將非結構化的日志進行定義成結構化的格式

    mutate:對日志的字段進行修改,替換和刪除

    drop:對日志進行刪減部分

    clone:對日志進行復制,可以是增加或者是刪除操作

    geoip:添加ip的地理位置信息,用於在kibana的圖表統計信息,可以看到訪問的區域分布

  • Outputs

    Outputs是Logstash收集的最后一個環節,通常將前面收集的日志進行過濾規則以后再統一輸出到存儲區域。通常存儲區包含以下幾種:

    elasticsearch:將收集到的數據發送到elasticsearch,其可以提供高效方便的格式化查詢

    file:將日志數據存儲在文件當中

    graphite:將日志存儲到開源的時序數據庫graphite當中,存儲和聚合監控數據並繪制圖表

    statsd:這是一個監聽服務,類似redis的使用,屬於一個中間緩沖層,結合graphite一起使用

  • Codecs

    Codecs是在輸入和輸出層的一個文本格式的編碼器,支持json,msgpack和各種文本格式,如txt

    json:對數據進行編碼和解碼成json格式

    multiline:將多行的文本進行合並成單行的文本格式進行輸出

2.3、Logstash的配置和運行

2.3.1、Logstash的目錄結構

在通過RPM包安裝Logstash后,我們可以看到有很多目錄,通常了解一個軟件的使用,對目錄的使用了解也是非常有必要的,可以加深對Logstash設計的理解,其結構如下:

類型 描述 默認值 如何定義配置
home logstash安裝的默認主目錄 /usr/share/logstash
bin logstash的二進制腳本程序和logstash-plugin插件安裝腳本 /usr/share/logstash/bin
settings 配置文件,包括logstash.yml、jvm選項配置、啟動選項配置 /etc/logstash path.settings
conf logstash數據收集配置 /etc/logstash/conf.d/*.conf /etc/logstash/pipelines.yml
logs 日志文件 /var/log/logstash path.logs
plugins 插件目錄 /usr/share/logstash/plugins path.plugins
data 數據持久化目錄 /var/lib/logstash path.data

2.3.2、Logstash的配置文件

Logstash主要有兩種配置文件,分別是:logstash.yml和pipeline.yml,logstash.yml用於配置logstash的啟動和執行相關配置,pipeline.yml用於配置流水線數據處理的配置。其中在安裝完成后,還包含以下的配置文件:

logstash.yml:定義logstash的基礎配置信息

pipeline.yml:定義數據收集規則的配置信息

jvm.options:定義JVM的總堆空間的最小值和最大值,也就是內存使用量,默認是1g

log4j2.properties:log4j2庫的相關設置

startup.options:定義logstash啟動時的相關配置

logstash.yml的詳解:

配置參數 解析 默認值
node.name 節點名稱定義 主機名
path.data 持久化數據目錄定義 LOGSTASH_HOME/data
pipeline.id pipeline的id號 main
pipeline.java_execution 使用java執行引擎 false
pipeline.workers 定義在過濾篩選和輸出階段的進程數量 默認為cpu的核心數
pipeline.batch.size 定義在篩選和輸出之前單次處理數據量大小,通常和jvm的堆內存值相關,值越大,jvm內存配置也需要更大 125
pipeline.batch.delay 批處理數據的時間延遲,在數據量不達標時的延遲時間,單位為毫秒 50
pipeline.unsafe_shutdown 在關機狀態強制關閉logstash在處理的數據,會導致數據丟失 false
path.config pipeline的相關配置,通常在pipeline.yml中配置好
http.host 監聽配置 "127.0.0.1"
http.port 監聽端口 9600
path.logs 日志路徑 LOGSTASH_HOME/logs
log.format 日志格式 文本
path.plugins 插件定義

2.4、Logstash實用舉例

Logstash配置文件構建語法:

input {
  ...
}

filter {
  ...
}

output {
  ...
}

2.5、Logstash常用插件

2.5.1、input插件

Logstash 使用一個名叫 FileWatch的 Ruby Gem 庫來監聽文件變化。這個庫支持 glob 展開文件路徑,而且會記錄一個叫 .sincedb的數據庫文件來跟蹤被監聽的日志文件的當前讀取位置。sincedb 文件中記錄了每個被監聽的文件的 inode, major number, minor number 和 pos。配置示例如下:

input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

tcp模塊的使用場景如下: 有一台服務器A只需要收集一個日志,那么我們就可以不需要在這服務器上安裝logstash,我們通過在其他logstash上啟用tcp模塊,監聽某個端口,然后我們在這個服務器A把日志通過nc發送到logstash上即可。

input {
    tcp {
        port => "5566"
        mode => "server"
        type => "tcplog"
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

syslog支持RFC3164的系統日志格式,在logstash端進行tcp或upd的監聽,從而實現對系統日志的收集。配置該日志收集,本機的syslog會默認發送到logstash,同時也要在rsyslog進行配置發送的監聽地址。

# vim /etc/rsyslog.conf		#修改rsyslog發送日志的監聽端口
*.* @@192.168.56.100:44231

#配置logstash收集rsyslog發送的日志並標准輸出
input {
    syslog {
        port => "44231" 
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

具體實現中,UDP 監聽器只用了一個線程,而 TCP 監聽器會在接收每個連接的時候都啟動新的線程來處理后續步驟。所以在監聽時,建議配置TCP的監聽的性能會更佳。

2.5.2、filter插件

  • date
  • grok
  • dissect
  • geoip
  • json
  • kv
  • metrics
  • mutate
  • ruby
  • split
  • elapsed

curl '192.168.56.100:9200/_cat/indices?v'

2.5.3、output插件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM