logstash基礎語法與使用


ELK架構技術棧
ELK是 Elasticsearch、Logstash、Kibana三大開源框架首字母大寫簡稱
市面上也被成為Elastic Stack。
其中Elasticsearch是一個基於Lucene、分布式、通過Restful方式進行交互的近實時搜索平台框架。像類似百度、谷歌這種大數據全文搜索引擎的場景都可以使用Elasticsearch作為底層支持框架,可見Elasticsearch提供的搜索能力確實強大,市面上很多時候我們簡稱 Elasticsearch為es
Logstash是ELK的中央數據流引擎,用於從不同目標(文件/數據存儲/MQ)收集的不同格式數據,經過過濾后支持輸出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以將elasticsearch的數據通過友好的頁面展示出來,提供實時分析的功能。

logstash基礎語法與使用


logstash安裝:

## 解壓安裝
tar -zxvf logstash-6.6.0.tar.gz -C /usr/local/

## conf下配置文件說明:
# logstash配置文件:/config/logstash.yml
# JVM參數文件:/config/jvm.options
# 日志格式配置文件:log4j2.properties
# 制作Linux服務參數:/config/startup.options

## 配置文件說明:
vim /usr/local/logstash-6.6.0/config/logstash.yml

--path.config 或 –f :logstash啟動時使用的配置文件
--configtest 或 –t:測試 Logstash 讀取到的配置文件語法是否能正常解析
--log或-l:日志輸出存儲位置
--pipeline.workers 或 –w:運行 filter 和 output 的 pipeline 線程數量。默認是 CPU 核數。
--pipeline.batch.size 或 –b:每個 Logstash pipeline 線程,在執行具體的 filter 和 output 函數之前,最多能累積的日志條數。
--pipeline.batch.delay 或 –u:每個 Logstash pipeline 線程,在打包批量日志的時候,最多等待幾毫秒。
--verbose:輸出調試日志
--debug:輸出更多的調試日志

## 虛擬機配置
vim /usr/local/logstash-6.6.0/config/jvm.options

## 啟動配置 比如啟動時的java位置、LS的home等
vim /usr/local/logstash-6.6.0/config/startup.options

## 數據收集目錄:/usr/local/logstash-6.6.0/data
## 插件目錄:/usr/local/logstash-6.6.0/vendor/bundle/jruby/1.9/gems
## 查看插件命令:
/usr/local/logstash-6.6.0/bin/logstash-plugin list
## 更新插件命令:
/usr/local/logstash-6.6.0/bin/logstash-plugin update logstash-xxxx-xxxxx
## 安裝插件命令:
/usr/local/logstash-6.6.0/bin/logstash-plugin install logstash-xxxx-xxxxx
## 插件地址: https://github.com/logstash-plugins

logstash語法與基本使用:

  1. Logstash設計了自己的DSL包括有區域,注釋,數據類型(布爾值,字符串,數值,數組,哈希),條件判斷字段引用等。

  2. Logstash用{}來定義區域。區域內可以包括插件區域定義,你可以在一個區域內定義多個插件。插件區域內則可以定義鍵值對設置。

  3. 格式、語法、使用方式:

    # 注釋.
    input {
      ...
    }
     
    filter {
      ...
    }
     
    output {
      ...
    }
    
    ## 兩個input設置:
    input {
      file {
        path => "/var/log/messages"
        type => "syslog"
      }
      file {
        path => "/var/log/apache/access.log"
        type => "apache"
      }
    }
    
    ## 數據類型:
    ## bool類型
    debug => true
    ## string類型
    host => "hostname"
    ## number類型
    port => 6789
    ## array or list類型
    path => ["/var/log/message","/var/log/*.log"]
    ## hash類型
    match => {
        "field1" => "value1"
        "field2" => "value2"
    }
    ## codec類型
    codec => "json"
    
    ##字段引用方式:
    {
        "agent":  "Mozilla/5.0  (compatible;  MSIE  9.0)",
        "ip":  "192.168.24.44",
        "request":  "/index.html"
        "response":  {
            "status":  200,
            "bytes":  52353
        },
        "ua":  {
            "os":  "Windows  7"
        }
    }
    ##獲取字段值:
    [response][status]
    [ua][os]
    
    
    ## 條件判斷condition:
    if EXPRESSION {
      ...
    } else if EXPRESSION {
      ...
    } else {
      ...
    }
    
    ==(等於), !=(不等於), <(小於), >(大於), <=(小於等於), >=(大於等於), =~(匹配正則), !~(不匹配正則)
    in(包含), not in(不包含), and(與), or(或), nand(非與), xor(非或)
    ()(復合表達式), !()(對復合表達式結果取反)
    
    ## 使用環境變量(缺失報錯):
    input { 
    	tcp { 
    		port => "${TCP_PORT}" 
    	} 
    }
    ## 使用環境變量(缺失使用默認值):
    input { 
    	tcp { 
    		port => "${TCP_PORT:54321}" 
    	} 
    }
    
    
  4. logstash例子:

    ## input 從標准輸入流:
    input { stdin { } }
    
    ## 輸入數據之后 如何進行處理:
    filter {
      ## grok:解析元數據插件,這里從input輸入進來的所有數據默認都會存放到 "message" 字段中
      ## grok提供很多正則表達式,地址為:http://grokdebug.herokuapp.com/patterns
      ## 比如:%{COMBINEDAPACHELOG} 表示其中一種正則表達式 Apache的表達式
      grok {
        match => { "message" => "%{COMBINEDAPACHELOG}" }
      }
      ## date:日期格式化
      date {
        match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
      }
    }
    
    ## output 從標准輸出流:
    output {
      elasticsearch { hosts => ["192.168.11.35:9200"] }
      stdout { codec => rubydebug }
    }
    
  5. file插件使用:

    ## file插件
    input {
        file {
            path => ["/var/log/*.log", "/var/log/message"]
            type => "system"
            start_position => "beginning"
        }
    }
    ## 其他參數:
    discover_interval ## 表示每隔多久檢測一下文件,默認15秒
    exclude ## 表示排除那些文件
    close_older ## 文件超過多長時間沒有更新,就關閉監聽 默認3600s
    ignore_older ## 每次檢查文件列表 如果有一個文件 最后修改時間超過這個值 那么就忽略文件 86400s
    sincedb_path ## sincedb保存文件的位置,默認存在home下(/dev/null)
    sincedb_write_interval ## 每隔多久去記錄一次 默認15秒
    stat_interval ## 每隔多久查詢一次文件狀態 默認1秒
    start_position ## 從頭開始讀取或者從結尾開始讀取
    
 
 


免責聲明!

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



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