event 처리

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 |
logstash ruby 활용법
전체 코드
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 |
logstash jdbc mssql output
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
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 |
logstash file json absolute path
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 input-plugin (elasticsearch)
$ ./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 plugin install
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
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
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 |