ELK提升篇之Logstash

2、Logstash

2.一、安裝logstash

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

[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安裝方式:node

# 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的工做原理圖:redis

1567733408929

標準的輸入輸出測試:數據庫

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

2.二、Logstash的工做原理解析

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

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

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

  • Inputsbash

    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.三、Logstash的配置和運行

2.3.一、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.二、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.四、Logstash實用舉例

Logstash配置文件構建語法:

input {
  ...
}

filter {
  ...
}

output {
  ...
}

2.五、Logstash經常使用插件

2.5.一、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.二、filter插件

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

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

2.5.三、output插件

相關文章
相關標籤/搜索