首页 > 解决方案 > 在vim中缩进logstash文件的技巧

问题描述

你能帮我一个技巧在vim中使用两个splace缩进logstash文件吗?

例如这个

input {
  stdin {
  codec => "json"
 }
  }

filter {
    json {
    source => "Filebeat"
target => "Filebeat"
   }
            }
 output{
  elasticsearch {
    hosts => ["localhost"]
 index => "dhcp-%{+YYYY.MM}-11"
   }
   }

将会

input {
  stdin {
    codec => "json"
  }
}

filter {
  json {
    source => "Filebeat"
    target => "Filebeat"
  }
}
output{
  elasticsearch {
    hosts => ["localhost"]
    index => "dhcp-%{+YYYY.MM}-11"
  }
}

这是另一个 logstash 配置文件的例子

input {
   file {
      path => "/usr/share/logstash/hola/*.xml"
      type => "hola"
      start_position => "beginning"
      sincedb_path => "/usr/share/logstash/sincedb/hola"
      codec => multiline {
         pattern => "</HOLA>"
         negate => true
         what => "next"
      }
      codec => plain {
         charset => "UTF-8"
      }
      max_open_files => "30000"
   }
}

filter {
   if [type] == "hola" {
      mutate {
        add_field => { "[rrrrrrr][name]" => "hola" }
      }
      mutate {
         gsub => [
            "message", "&", "E",
            "message", "<\?xml .*\?>", "",
            "message", "<BLOCO>", "",
            "message", "<\/BLOCO>", "",
            "message", "<br>", "",
            "message", "    ", ""
         ]
         strip => ["message"]
      }

      xml {
         source => message
         target => hola
      }

      if ![hola] {
         drop {
         }
      }

      fingerprint {
         method => "SHA256"
         key => "433247"
         source => [ "message" ]
      }

      mutate {
         convert => {
            "[hola][CrD_rILrAr]" => "string"
         }

         remove_field => [ "message" ]
      }

      date {
         match => [ "[hola][DT_ffffff][0]", "dd/MM/yyyy HH:mm:ss" ]
         timezone => 'America/LIMA'
      }
   }
}

output {
    if [type] == "hola" {
       elasticsearch {
           hosts => [
           "xxxtal.com",
           "xxxtal.com",
           "xxxtal.com",
           "xxxtal.com"
           ]
           user => logstash
           password => xxxx
           document_id => "%{fingerprint}"
           index => "hola-%{+YYYY.MM}"
       }
    }
}

标签: vim

解决方案


我制作了一个键映射,它基本上为您的用例实现了自定义缩进。它适用于您提供的更大示例。可能不是最好的解决方案,当然也不是最干净的解决方案,但你去吧:

nmap <F2> :%s/^\s*<CR>:g/{/+ normal >G<CR>:g/}/normal <G<CR>:g/{.*}/:><CR>:g/\[/+ normal >G<CR>:g/\]/normal <G<CR>:g/\[.*\]/:><CR>

它的作用是:

  • 删除所有缩进。
  • 对于每个文件{[将文件的其余部分向右缩进一个。
  • 对于每个}]将文件的其余部分向左缩进一个,包括找到括号的行。
  • 具有{.*}和/或[.*]的每一行也向左缩进一个。

就像我说的,不是最干净的方式,但它似乎有效。还寻找插件来做同样的事情,但这些似乎不存在于logstash文件中。

编辑:我试图稍微整理一下命令,但这会破坏一些边缘情况,这仍然是最好的结果命令。


推荐阅读