跳到主要內容

Logstash mutate filter

最近在研究Logstash,透過Logstash的input, filter, output可以產生出許多不同的變化... 下面是我前陣子遇到的問題,後來找到解決方案....

例如我在抓CentO6.6的rsyslog時候,我把/var/log/message中的一些syslog重倒到logstash中

$ vi /etc/rsyslog.conf

*.info;mail.none;authpriv.none;cron.none                @@10.240.58.95:514

另外,logstash server部分,透過input syslog module開啟514 port接聽syslog input...

input {
  syslog {
    port => 514
    type => syslog
  }
}

此時收到的syslog在rubydebug模式下,會類似:

{
           "message" => "Installed: mysql-5.1.73-3.el6_5.x86_64",
          "@version" => "1",
        "@timestamp" => "2015-03-25T03:50:01.000Z",
              "type" => "syslog",
              "host" => "10.240.219.254",,
        "timestamp" => "Mar 25 03:50:01"
          "priority" => 14,
         "logsource" => "simon-centos6",
           "program" => "yum",
               "pid" => "645",
          "severity" => 6,
          "facility" => 1,
    "facility_label" => "user-level",
    "severity_label" => "Informational"
}

其中,會明顯地發現有兩個timestamp的欄位... 雖然有個前面加上"@"
而這個重複的timestamp欄位會造成其他的output module錯誤,導致一些其他問題...

在找了很久,後來發現mutate這個filter module.... 透過mutate可以讓欄位改名稱、改內容、刪除欄位、增加欄位... 這樣在input與output之間的銜接,就少掉很多問題...
下面範例是透過mutate的rename function來置換我所遇到的重複key...

input {
  syslog {
    port => 514
    type => syslog
  }
}
filter {
  mutate {
    rename => [ "timestamp", "timestamp1" ]
  }
}
output {
  stdout { codec => rubydebug }
}

如果一切沒有問題,再重新執行logstash之後,可以看到新的output,其中可以看到timestamp1會被排到最後面

{
           "message" => "Installed: mysql-5.1.73-3.el6_5.x86_64",
          "@version" => "1",
        "@timestamp" => "2015-03-25T03:50:01.000Z",
              "type" => "syslog",
              "host" => "10.240.219.254",
          "priority" => 14,
         "logsource" => "simon-centos6",
           "program" => "yum",
               "pid" => "645",
          "severity" => 6,
          "facility" => 1,
    "facility_label" => "user-level",
    "severity_label" => "Informational",
        "timestamp1" => "Mar 25 03:50:01"
}


這樣傳給output的值就沒有問題了ㄛ :D

這個網誌中的熱門文章

Oracle LISTAGG

同事介紹的一個Oracle的好用查詢:LISTAGG
SELECT A.GROUP_ID,A.KEY, LISTAGG(A.VALUE,'; ')WITHINGROUP(ORDERBYA.VALUE)as GG  fromSYS_PROPERTIESaGROUP byA.GROUP_ID,A.KEY
LISTAGG可以將group後的結果會總顯示於一個欄位 上述SQL原本A.VALUE會是一個row一個row的排列 使用LISTAGG之後,可以將A.VALUE顯示在同一個row中 並且可以指定間隔符號(在此設定為';') 針對某一些報表查詢非常有用唷 :D

Flashback Query

感謝我的好友提供的: 在Oracle好用的指令...
Flashback Query: 讓異動過的資料表回到歷史時間點 Step 1. è
show parameter undo_retention  PS: 這個參數顯示系統上設定歷史保留時間(ex: 900 = 900秒) Step 2. è CREATETABLE XXXXX_0815 ASSELECT *  FROM XXXXXASOFTIMESTAMPTO_TIMESTAMP('2011-08-15 12:00:00','YYYY-MM-DD HH24:MI:SS');
PS: 透過as of timestamp方式取出該時間點的表格資料

Xoom 3.2 Upgrade

雖然Xoom早已經更新到3.2 但是台灣遲遲沒有更新版本@@ 終於按奈不住好奇心了... XDA上找到給604(台版Xoom)的3.2版本ROM(美版的) 動手刷拉~~ 出奇的順利阿... 下面是兩個相關網址:
http://forum.xda-developers.com/showthread.php?t=1165998
http://forum.xda-developers.com/showthread.php?t=1080963
我這邊是刷第二各網址下載的3.2 ROM(http://www.mediafire.com/?adsa081m3z8uykd) 3.1的就沒去測拉... 也沒有再去破解(遲早的ㄅ:P)
使用心得: 1. 順~比3.0操頻還順 2. 原生就支援micro-sd 3. 目前看是不支援USB...缺憾@@ 4. 因為美版的關係,所以有Books跟Videos兩個APP,但是因為網路地區的關係不能用就是了... 5. 沒有原生中文輸入法,不過對我沒差...我都用Google拼音 :D