簡體   English   中英

logstash:如何包括輸入文件行號

[英]logstash: how to include input file line number

我正在嘗試創建一種導航日志文件的方法,我需要的主要功能是:

  1. 在日志文件中搜索字符串(並返回出現的行)。
  2. x線到y線的分頁。

現在,我正在檢查Logstash,它對於我的第一個功能(搜索)看起來很不錯,但對於第二個功能來說並沒有那么多。 我當時的想法是我可以某種方式索引文件行號以及每條記錄的日志信息,但是我似乎找不到辦法。

是否有某種Logstash過濾器可以做到這一點? 或Filebeat處理器? 我不能使它工作。

我當時在想,也許我可以為所有進程創建一種方法,以便使用處理過的信息登錄數據庫,但這也是不可能的(或者非常困難),因為日志處理程序也不知道當前的日志行是什么。

最后,我所能做的就是,通過一種服務(通過服務)對我的日志文件進行分頁的方法是實際打開它,導航到特定的行並在不是很好的服務中顯示它,因為該文件可能很大,並且我已經將它編入Elasticsearch(使用Logstash)。

我當前的配置非常簡單:

文件拍

filebeat.prospectors:
- type: log
  paths:
    - /path/of/logs/*.log
output.logstash:
  hosts: ["localhost:5044"]

Logstash

input {
    beats {
        port => "5044"
    }
}
output {
  elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

例如,現在我正在獲得類似的商品:

    {
      "beat": {
        "hostname": "my.local",
        "name": "my.local",
        "version": "6.2.2"
      },
      "@timestamp": "2018-02-26T04:25:16.832Z",
      "host": "my.local",
      "tags": [
        "beats_input_codec_plain_applied",
      ],
      "prospector": {
        "type": "log"
      },
      "@version": "1",
      "message": "2018-02-25 22:37:55 [mylibrary] INFO: this is an example log line",
      "source": "/path/of/logs/example.log",
      "offset": 1124
    }

如果我能以某種方式在該項目中包含line_number: 1類的字段,那將非常好,因為我可以使用Elasticsearch過濾器實際瀏覽整個日志。


如果你們對存儲我的日志(和導航)的不同方式有想法,請也告訴我

日志文件是您生成的嗎? 還是可以更改日志結構? 然后,您可以添加一個計數器作為前綴,並使用logstash過濾掉它。

例如

12345 2018-02-25 22:37:55 [mylibrary] INFO: this is an example log line

您的過濾器必須如下所示:

filter {
   grok {
     match => {"message" => "%{INT:count} %{GREEDYDATA:message}"
     overwrite => ["message"]
   }
}

將創建新的字段“ count”。 然后,您可以將其用於您的目的。

目前,我認為這里沒有任何解決方案。 Logstash,Beats和Kibana都具有隨着時間推移而發生事件的想法,這基本上就是事物排序的方式。 行號更像是文本編輯器的一種功能。

Kibana可以在某種程度上向您顯示文件中的事件。 它不會為您提供一頁一頁的列表,您可以在其中實際單擊頁碼,但是使用時間范圍,理論上您可以查看整個文件。

對於BeatsLogstash也有類似的請求(增強功能)。

首先,讓我給出Filebeat尚無行號字段的可能主要原因。 當Filebeat重新開始讀文件(如重啟后),它的fseek從記錄的最后一個偏移量簡歷。 如果它必須報告行號,則要么需要將此狀態存儲在其注冊表中,要么需要重新讀取文件並計算換行符直到偏移量。

如果要提供允許您對Elasticsearch支持的日志進行分頁的服務,則可以對查詢文件使用滾動 API。 您必須按@timestamp然后按offset對結果進行排序 您的服務將使用滾動查詢來獲取結果的第一頁。

POST /filebeat-*/_search?scroll=1m
{
  "size": 10,
  "query": {
    "match": {
      "source": "/var/log/messages"
    }
  },
  "sort": [
    {
      "@timestamp": {
        "order": "asc"
      }
    },
    {
      "offset": "asc"
    }
  ]
}

然后,要獲取所有將來的頁面,請使用從第一個查詢返回的scroll_id

POST  /_search/scroll
{
    "scroll" : "1m",
    "scroll_id" : "DnF1ZXJ5VGhlbkZldGNoBwAAAAAAPXDOFk12OEYw="
}

這將為您提供給定文件名的所有日志數據,甚至跨輪循對其進行跟蹤。 如果行號很關鍵,則可以通過對從offset == 0的第一個事件開始的事件進行計數來合成它們,但是我避免了這一點,因為它非常容易出錯,尤其是當您添加任何過濾或多行分組時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM