ELK-Logstash 配置 概述 常用配置

概述

Logstash 分爲 ShipperIndexer 兩種角色,分別完成不同的工作:

  • Shipper:安裝在 client 上,只負責採集和傳輸日誌;
  • Indexer:安裝在 server 上,從隊列(例如 redis)讀取日誌、過濾、格式化等,然後存入 Elasticsearch

常用配置

Logstash 的工作,涉及 inputoutput 兩種插件。

input 插件

input 插件,是用來提取日誌文件,一般使用 file 插件,該插件常用的幾個參數是:

  • path:日誌文件路徑;
  • type:名稱,可以在後面的 filteroutput 中對不同的 type 做不同的處理;
  • start_position:指定起始讀取位置,“beginning” 表示從文件頭開始,“end” 表示從文件尾開始;
  • sincedb_pathLogstash 會記錄每個文件已經被讀取到的位置,保存在 sincedb 中,如果 Logstash 重啓,那麼對於同一個文件,會繼續從上次記錄的位置開始讀取。如果想重新從頭讀取文件,需要刪除 sincedb 文件,sincedb_path 則是指定了該文件的路徑。爲了方便,我們可以根據需要將其設置爲 “/dev/null”,即不保存位置信息。

output 插件

output 插件,是用來輸出日誌的,可以將數據輸出到消息隊列(例如 redis)、標準輸出(stdout)或者 Elasticsearch

Shipper 示例

建議不要做任何的處理,直接傳輸日誌,以免佔用過多的服務器資源。

input{
    file{
        type => "redis"
        path => "/var/redis/redis.log"
        start_position => "beginning"
        #sincedb_path => "/dev/null"
    }
}

output{
    if [type] == "redis"{
        redis{
            host => "127.0.0.1"
            data_type => "list"
            key => "redis"
            db => 1
            password => "123456"
        }
    }
}

sincedb_path 記錄了上次讀取日誌的位置,這也算是個BUG吧,因爲服務重啓時,日誌重新加載,而 logstash 需要從 sincedb_path 處讀取,自然是獲取不到日誌內容的,如果要獲取日誌內容,需要刪掉 sincedb_pathsincedb_path 路徑可以在 logstash.yml 中查看和配置,或者爲了服務重啓時能重新讀取日誌,可以不記錄 sincedb_path 值,如 sincedb_path => "/dev/null" ,那麼服務重啓時,就從頭開始讀取日誌。

Indexer 示例

input{
    redis{
        type => "redis"
        host => "127.0.0.1"
        data_type => "list"
        key => "redis"
        db => 1
        password => "123456"
    }
}

output{
    if [type] == "redis"{
        elasticsearch{
            hosts => "10.16.4.56"
            index => "redis-%{+YYYY-MM-dd}"
        }
    }
}

可以寫多個文件,也可以寫在一起。
此處從 redis 隊列中讀取的日誌記錄,並未做任何的過濾和格式化,在生產環境中還是需要過濾和格式化的,並根據不同的日誌類型,寫入不同的 index 中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章