项目作者: cclient

项目描述 :
logstash 内嵌字段解码 use original logstash-codec-plugins and logstash-filter-ruby decode nested-filed
高级语言: Ruby
项目地址: git://github.com/cclient/logstash-nested-field-codec.git
创建时间: 2018-12-06T11:36:03Z
项目社区:https://github.com/cclient/logstash-nested-field-codec

开源协议:

下载


logstash-nested-field-codec

use original logstash-codec-plugins and logstash-filter-ruby decode nested-filed

like

  1. {
  2. "name": "logstash-nested-field-codec",
  3. "base64_encode": "CghKb2huIERvZRDSCRoQamRvZUBleGFtcGxlLmNvbSIMCgg1NTUtNDMyMRAB"
  4. }

=>

  1. {
  2. "name": "logstash-nested-field-codec",
  3. "base64_decode": {
  4. "key":"value"
  5. }
  6. }

RUN DEMO

run docker contain

  • git clone git@github.com:cclient/logstash-nested-field-codec

  • docker run -d --name logstash-nested-field-codec -v $(pwd)/logstash-nested-field-codec:/usr/share/logstash/logstash-nested-field-codec docker.elastic.co/logstash/logstash:6.3.2 tail -f /dev/null

start logstash

  • docker exec -it logstash-nested-field-codec bash

  • logstash-plugin install logstash-codec-protobuf

  • logstash -f logstash-nested-field-codec/nested-field-codec.conf

new session

docker exec -it logstash-nested-field-codec bash

echo -e "\n" >> logstash-nested-field-codec/log/demo.json

expect out

  1. {
  2. "base64_encode": "CghKb2huIERvZRDSCRoQamRvZUBleGFtcGxlLmNvbSIMCgg1NTUtNDMyMRAB",
  3. "name": "logstash-nested-field-codec",
  4. "json_decode": {
  5. "k": "v"
  6. },
  7. "base64_decode": "\n\bJohn Doe\u0010Ò\t\u001a\u0010jdoe@example.com\"\f\n\b555-4321\u0010\u0001",
  8. "protobuf_decode": {
  9. "@version": "1",
  10. "phones": [
  11. {
  12. "type": 1,
  13. "number": "555-4321"
  14. }
  15. ],
  16. "email": "jdoe@example.com",
  17. "id": 1234,
  18. "@timestamp": "2018-12-07T02:52:08.497Z",
  19. "name": "John Doe"
  20. },
  21. "path": "/usr/share/logstash/logstash-nested-field-codec/log/demo.json",
  22. "host": "1753d2919ebe",
  23. "json_encode": "{\"k\":\"v\"}",
  24. "@timestamp": "2018-12-07T02:52:07.945Z",
  25. "@version": "1"
  26. }

this demo test for protobuf to other logstash-codec-plugins

view

https://github.com/logstash-plugins/logstash-codec-{name}/blob/master/spec/codecs/{name}_spec.rb

https://www.elastic.co/guide/en/logstash/6.3/plugins-codecs-{name}.html

get detail config info

example

avro

https://github.com/logstash-plugins/logstash-codec-avro/blob/master/spec/codecs/avro_spec.rb

https://www.elastic.co/guide/en/logstash/6.3/plugins-codecs-avro.html

  1. require 'logstash/devutils/rspec/spec_helper'
  2. require 'avro'
  3. require 'base64'
  4. require 'logstash/codecs/avro'
  5. require 'logstash/event'
  6. ...
  7. let (:avro_config) {{ 'schema_uri' => '
  8. {"type": "record", "name": "Test",
  9. "fields": [{"name": "foo", "type": ["null", "string"]},
  10. {"name": "bar", "type": "int"}]}' }}
  11. subject do
  12. allow_any_instance_of(LogStash::Codecs::Avro).to \
  13. receive(:open_and_read).and_return(avro_config['schema_uri'])
  14. next LogStash::Codecs::Avro.new(avro_config)
  15. end
  16. ...
  17. subject.decode(buffer.string) do |event|
  18. insist {event.is_a? LogStash::Event}
  19. insist {event.get("foo")} == test_event.get("foo")
  20. insist {event.get("bar")} == test_event.get("bar")
  21. end
  22. ...

custom_codec_avro.rb

  1. require "logstash/codecs/avro"
  2. $subject do
  3. allow_any_instance_of(LogStash::Codecs::Avro).to \
  4. receive(:open_and_read).and_return(avro_config['schema_uri'])
  5. next LogStash::Codecs::Avro.new(avro_config)
  6. end
  7. def decode(encode)
  8. $subject.decode(encode) do |event|
  9. return event.to_hash
  10. end
  11. end