티스토리 뷰

[업데이트 2016.12.29 10:39]

 

Logstash에서 Ruby Filter를 통해 데이터 제어를 보다 더 풍부하게 처리 할 수 있습니다.

아래의 내용은 XML 데이터를 가져와서 배열 형태로 만든 후, 각 배열 아이템의 key name을 다시 저장하는 Ruby 코드입니다.

filter {
	xml {
		source => "xml"
		store_xml => "false"
		

		xpath => [ 
				   "/root/data/appname", "APPName"
		]
		
		remove_field => [ "xml" ]
	}

	xml {
			source => "APPName"
			force_array => "false"
			target => "APPName"
	}

	if ( [APPName] ) {
		ruby {
			add_field => { "APPName_Keynames" => "" }
			code => "
			 event.set('APPName_Keynames', event.get('APPName').keys) 
			"
		}
	}	
}

 

다음은 특정 hash 값에서 key값을 value 개수 만큼 카운팅하여 string으로 만드는 Ruby code입니다.

filter {

	# UserName : Hash value
	# ex) { "John" => "4", "Jeff" => "2" }
	# output string : "John,John,John,John,Jeff,Jeff"
	if ( [UserName] ) {
		ruby {
						
			code => "
			
			# init a variable
			event.set('UserNameSeparated', nil)
			
			str_out = ''
			flag = false

			
			# do each hash(key/value)
			event.get('UserName').each { |key, value| 
				
				# convert string value to integer type
				max_cnt = value.to_i

                # word.exe => word,   new_key[0] => word, new_key[1] => .exe
                new_key = key.partition('.')    

				# add user name as long as the number of user names
				for i in 1..max_cnt
										
					# do not add comma before first value
					if i == 1 && flag == false
						str_out.concat(new_key[0])
						flag = true
						
					else
						str_out.concat(',')
						str_out.concat(new_key[0])
					end
				end
			}

			event.set('UserNameSeparated', str_out)
			
			"
			remove_field => [ "UserName" ]
		}
	}		
}

 

Ruby filter를 사용하다보니 Ruby 문법 오류 등으로 매번 Logstash를 실행하면서 동작여부를 확인하는 불편함이 있었는데, Ruby Windows 버전을 설치하여 Ruby code 동작을 확인하면서, Logstash에 config파일에 반영하였습니다.

 

* 참고: http://rubyinstaller.org/downloads/

 

또한 Ruby 문법에 대한 설명 등은 아래의 사이트를 참조 하였습니다.

 

* 참고: https://opentutorials.org/module/517

 

Ruby Filter의 자세한 사용법은 아래의 링크를 참조하시면 됩니다.

 

* 참고: https://www.elastic.co/guide/en/logstash/current/plugins-filters-ruby.html
* 참고: https://www.elastic.co/guide/en/logstash/current/breaking-changes.html
* 참고: https://www.elastic.co/guide/en/logstash/current/event-api.html

* 참고: http://ruby-doc.org/core-2.0.0/String.html#method-i-partition

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함