event 처리

ELK/logstash2020. 12. 22. 17:35

logstash에서 document의 특정 field 값을 얻기 위해서는 event.get("field-name")을 사용하고

document에 특정 field값을 추가 시키기 위해서는 event.set("new-field-name", value))를 넣어주면 된다.

'ELK > logstash' 카테고리의 다른 글

특정 필드의 값 변경  (0) 2020.11.30
logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

'ELK > logstash' 카테고리의 다른 글

event 처리  (0) 2020.12.22
logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

전체 코드

require 'elasticsearch'

class EsTest

  attr_accessor :esClient, :action_array
  def initialize
    @esClient = Elasticsearch::Client.new
    @action_array = Array.new
  end

  def totalIndex
    ## 전체 인덱스 조회
    response   = esClient.cat.indices
    if ! response.nil?
      totalIndex = response.split("\n")
      totalIndex.each_with_index do |datas,index|
        index_name = datas.split(" ")[2]

        if index_name.chars.first != "."
          ## document가 몇개 인지 확인___________________________________________________________
          total_doc_count = esClient.count index: index_name, body: {query: {match_all:{}}}

          puts " nu: #{index}"

          action_array.push({"index"=> {"_index"=> "my_total_index","_id"=> index,"data"=> {"index_name"=> index_name,"index_count"=> total_doc_count["count"]}}})
        end
      end # end of totalIndex each
      esClient.bulk body: action_array
    end # end of nil?
  end
end

def register(params)
  @es = EsTest.new
end

def filter(event)

  event.set("work_time", Time.now.strftime("%Y%m%d"))

  if event.get("result") != "es server access error"
    @es.totalIndex
    return [event]

  else
    return [event]
  end
end




 

생성자

: ruby 에서 생성자는 initialize 이름의 함수로 사용된다.

=> @esClient : elasticsearch 인스턴스

=> @action_array : Array 인스턴스 ( 코드상에서 bulk 구조로 데이터를 insert 하기 위해 선언된 부분 )

=================================================================

 

1) esClient.cat.indices 는 전체 인덱스의 목록을 리턴해준다. 

2) response.nil 은 해당 변수가 null 값인지를 물어보는 부분이다.

3) split 은 문자열을 특정 문자를 기준으로 자르게 된다.  ( 자르고 리턴된 값은 Array 이다. )

4) each_with_index 는 python 에서 enumerate 하고 동일

=================================================================

 

1) .chars.first 는 문자열에서 첫번째 문자 즉 인덱스에서 0 에 위치에 시작하는 값이다.

'ELK > logstash' 카테고리의 다른 글

event 처리  (0) 2020.12.22
특정 필드의 값 변경  (0) 2020.11.30
logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17

input {
	elasticsearch {
		hosts => "localhost:9200"
		index => "server_kimjh"
		query => '{ "query": { "match_all": {} } }'
		size   => 100
		scroll => "2m"
	}
}

output {
	stdout { codec => rubydebug }
	jdbc {
		connection_string => "jdbc:sqlserver://localhost:1433;databaseName=server_kimjh;user=kimjh;password=P@ssw0rd!"
		driver_jar_path => "C:/Users/EZFARM/Desktop/jar_/sqljdbc/sqljdbc4.jar"
		driver_class => "com.microsoft.sqlserver.jdbc.SQLServerDriver"
		unsafe_statement => true
		statement => ["INSERT INTO stu_info (stu_name, stu_age) VALUES(?,?)", "%{stu_name}", "%{stu_age}"]
	}
}

 

input 에 의해서 내려오는 결과값은 한개씩 output 으로 던진다.

 

input 부분

>curl -XGET localhost:9200/server_kimjh/_mapping?pretty
{
  "server_kimjh" : {
    "mappings" : {
      "_doc" : {
        "properties" : {
          "stu_age" : {
            "type" : "long"
          },
          "stu_name" : {
            "type" : "text",
            "fields" : {
              "keyword" : {
                "type" : "keyword",
                "ignore_above" : 256
              }
            }
          }
        }
      }
    }
  }
}

stu_age 의 field 타입은 long

stu_name 의 field 타입은 text

 

elasticsearch plugin

 => hosts : 노드의 개수에 따라 array로 표현하면 된다. ["https://xxx.xxx.xxx.xxx:9200", "https://xxx.xxx.xxx.xxx:9200","https://xxx.xxx.xxx.xxx:9200"]

 => query : 개인적으로 아쉬운 부분이긴한데 inline의 형태로 string 으로 입력되어야 한다.

 => size : fetch count

 => scroll : 얘는 정확히 아직 모르겠다. (pagination 처리시 필요한 것으로 일단은 파악)

 

output 부분

 jdbc output 플러그인 사용

'ELK > logstash' 카테고리의 다른 글

특정 필드의 값 변경  (0) 2020.11.30
logstash ruby 활용법  (0) 2020.07.07
logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12

logstash eve_odd

ELK/logstash2020. 6. 17. 22:05

json file ==============================================================

{"num": 11}
{"num": 12}
{"num": 13}
{"num": 14}
{"num": 15}
{"num": 16}

 

ruby file ==============================================================

def register( params )
    #empty
end

def filter( event )
    remainder = event.get("remainder")
    if remainder == 0
        event.set("num_result", "even_number")
        return [ event ]
    else
        event.set("num_result", "odd_number" )
        return [ event ]
    end
end

 

logstash conf ==============================================================

input {

    file {
        path           => "/home/kimjh/Desktop/ruby_proj/stu_01.dir/1050.json"
        codec          => "json"
        start_position => "beginning"
        sincedb_path   => "/dev/null"
    }
}

filter {

    ruby {
        code => 'remainder = event.get("num")%2;
                 event.set("remainder", remainder)'
    }

    ruby {
        path => "/home/kimjh/Desktop/ruby_proj/stu_01.dir/1050.rb"
    }

    mutate {
        remove_field => ["@timestamp", "@version", "host", "path", "remainder"]
    }
}

output {

    stdout {
        codec => rubydebug
    }
}

 

결과 ==============================================================

'ELK > logstash' 카테고리의 다른 글

logstash ruby 활용법  (0) 2020.07.07
logstash jdbc mssql output  (0) 2020.07.04
logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15

input {
    file {
        path           => "/home/kimjh/Desktop/ela.dir/query_/n.json"
        type           => "json"
        start_position => "beginning"
        sincedb_path   => "/dev/null"
    }
}

filter {
    ruby {
        code => 'event.set("numCheck", "numberGood")'
    }
}

output {
    stdout {
        codec => rubydebug
    }
}

 

'ELK > logstash' 카테고리의 다른 글

logstash jdbc mssql output  (0) 2020.07.04
logstash eve_odd  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15
logstash + app-search  (0) 2019.12.10

$ ./logstash-plugin install logstash-input-elasticsearch
Validating logstash-input-elasticsearch
Installing logstash-input-elasticsearch
Installation successful


input {
    elasticsearch {
        hosts   => ["http://x.x.x.x:9200"]
        index   => "number_"
        query   => '{"query": {"match_all": {}}}'
        docinfo => true
    }
}

filter {
    mutate {
        remove_field => ["@version", "@timestamp"]
    }
}

output {
    file {
        path => "/home/kim/Desktop/elastic/l-762/conf/result.json"
        codec => "json_lines"
    }
}

'ELK > logstash' 카테고리의 다른 글

logstash eve_odd  (0) 2020.06.17
logstash file json absolute path  (0) 2020.06.17
logstash plugin install  (0) 2020.04.15
logstash + app-search  (0) 2019.12.10
logstash + python  (0) 2019.01.12

logstash 에 내가 필요한 플러그인을 추가해보자 

 

우선 내가 찾는 플러그인이 있는지 먼저 search

경로 : /bin

$ ./logstash-plugin list elastic

logstash-filter-elasticsearch

logstash-input-elasticsearch

logstash-output-elastic_app_search

logstash-output-elasticsearch

 

플러그인을 찾았으면 설치를 진행한다.

$ ./logstash-plugin install logstash-output-elasticsearch

Validating logstash-output-elasticsearch

Installing logstash-output-elasticsearch

Installation successful

 

체크

./logstash-plugin list

 

테스트

input {

  stdin {

    codec => "json"

  }

}

 

output {

  elasticsearch {

    hosts => ["http://192.168.42.11:9200", "http://192.168.42.11:9201", "http://192.168.42.11:9202"]

    index => "kim_1"

  }

}

'ELK > logstash' 카테고리의 다른 글

logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash + app-search  (0) 2019.12.10
logstash + python  (0) 2019.01.12
logstash - mysql - elasticsearch 연동  (0) 2019.01.06

logstash + app-search

ELK/logstash2019. 12. 10. 14:55

input {
    file {
        start_position => "beginning"
        path           => ["/opt/logstash-7.2.0/conf/test.json"]
        sincedb_path   => "/dev/null"
        codec          => "json"
    }
}

filter {
    mutate {
        remove_field => ["path", "@version", "@timestamp", "host"]
    }
}

output {
    stdout {}
    elastic_app_search {
        api_key => "private-fobwwhsirra3cgner79khnhi"
        engine  => "kimjunhyeon"
        url     => "http://172.16.40.139:3002"
        path    => "/api/as/v1/"
        id      => "test_01"
    }
}

'ELK > logstash' 카테고리의 다른 글

logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15
logstash + python  (0) 2019.01.12
logstash - mysql - elasticsearch 연동  (0) 2019.01.06

logstash + python

ELK/logstash2019. 1. 12. 23:59

GET _search

{

  "query": {

    "match_all": {}

  }

}


PUT movie

{

  "settings": {

    "number_of_shards": 5

  },

  "mappings": {

    "doc": {

      "properties" : {

        "ord": {"type": "integer"},

        "ele":{"type": "text"}

      }

    }

  }

}


DELETE movie

GET movie/_count

GET movie/_search


GET movie/_search?q=*&sort=ord:dec&pretty



GET /movie/_search

{

"query": {"match_all": { } },

"sort": [

{ "ord":"asc" }

],

"size": 20

}


GET /movie/_search

{

"query": {"match_all": { } },

"sort": [

{ "ord":"asc" }

],

"from": 10,

"size":10

}


GET /movie/_search

{

"query": { "match_all" : { } },

"sort": { "ord": { "order": "desc" } }

}



=========================================================================================================================

from bs4 import BeautifulSoup

import json

import requests

import elasticsearch

class OrderList:

    def __init__(self):

        self.target_url = "https://www.naver.com/"

        self.elements   = None

        self.es = elasticsearch.Elasticsearch()


    # requests

    def UrlRequests(self):

        html = requests.get(url= self.target_url)

        if html.status_code == 200:

            bs_obj = BeautifulSoup(html.text, "html.parser")

            ordered_lst = bs_obj.select_one("ul.ah_l")

            secondlst = ordered_lst.select("li.ah_item > a > span:nth-of-type(2)")

            self.elements = [{"ord":i+1, "ele":e.string} for i, e in enumerate(secondlst)]

            html.close()

            print(self.elements)


    # json 파일 만들기

    def JsonFileMake(self):

        with open("./File_json/naver_list.json", "w", encoding="utf-8") as f:

            json.dump(self.elements, f, ensure_ascii=False)

            f.close()


    # json 파일 읽어 오기

    def JsonFileRead(self):

        with open("./File_json/naver_list.json", "r", encoding="utf-8") as f:

            json_file = json.loads(f.read())

            print (json_file)

            f.close()


node = OrderList()  # object

node.UrlRequests()

node.JsonFileMake()

node.JsonFileRead()



'ELK > logstash' 카테고리의 다른 글

logstash file json absolute path  (0) 2020.06.17
logstash input-plugin (elasticsearch)  (0) 2020.05.12
logstash plugin install  (0) 2020.04.15
logstash + app-search  (0) 2019.12.10
logstash - mysql - elasticsearch 연동  (0) 2019.01.06