빅데이터가 대세 키워드였던 몇 년 전만 해도 하둡 등의 인프라가 모든 것을 해결해줄 듯한 분위기였다면 알파고 이후엔 수학 및 통계학, 그리고 그런 지식에 기반한 모델링 능력이 필수 자질로 꼽히는 세상이 되었다.
Easy to analyze if you are really curious about data
2021년 12월 30일 목요일
2021년 12월 26일 일요일
Logstash input jdbc error
다음은 Mysql 7.0 연결을 위한 로그스태시 파이프라인.
input { jdbc { jdbc_driver_library => "D:/mysql-connector-java-5.1.42/mysql-connector-java-5.1.42-bin.jar" jdbc_driver_class => "com.mysql.jdbc.Driver" jdbc_connection_string => "jdbc:mysql://localhost:3306/snort" jdbc_user => "user" jdbc_password => "password" schedule => "* * * * *"
2021년 12월 24일 금요일
2021년 11월 12일 금요일
2021년 10월 30일 토요일
하위 디렉토리 재귀 접근
C:\log 하위 디렉토리의 모든 로그를 가져와보자.
C:\log>dir /b/sC:\log\1001C:\log\1002C:\log\1003C:\log\1004C:\log\1005C:\log\1001\1001.logC:\log\1002\1002.logC:\log\1003\1003.logC:\log\1004\1004.logC:\log\1005\1005.logC:\log\1005\lastC:\log\1005\last\last.log
2021년 10월 24일 일요일
디렉토리 및 파일 동시 생성
윈도우
C:\log>for /l %i in (1001, 1, 1023) do (mkdir %i && echo %i > %i\%i.log)C:\log>dir /s/b *.logC:\log\1001\1001.logC:\log\1002\1002.logC:\log\1003\1003.logC:\log\1004\1004.logC:\log\1005\1005.logC:\log\1006\1006.logC:\log\1007\1007.logC:\log\1008\1008.logC:\log\1009\1009.logC:\log\1010\1010.log
2021년 10월 17일 일요일
2021년 10월 11일 월요일
엘라스틱 Runtime field - 4th
읽기 스키마 맛을 본 뒤론 가급적 런타임 필드를 사용하려고 한다. 다음은 URI 필드에서 url과 변수 정보를 런타임 필드로 추출하는 구문.
PUT test/_mapping{ "runtime": { "url": { "type": "keyword", "script": "emit(grok('(?<url>[^?]+)').extract(doc['uri.keyword'].value).url)" }, "param": { "type": "keyword", "script": "emit(grok('[^?]+\\\\??(?<param>.*)').extract(doc['uri.keyword'].value).param)" } }}
2021년 10월 5일 화요일
엘라스틱 Runtime field - 3rd
다음은 url 필드에서 추출한 파일과 확장자 정보를 이용해서 런타임 필드를 만드는 painless 스크립트. 정보 추출 범위는 .을 포함한 url만으로 제한했다.
PUT iislog/_mapping{ "runtime": { "file": { "type": "keyword", "script": """ if (doc['url'].value.contains('.')) { String result = grok('.*\\/(?<file>.*)').extract(doc['url'].value).file; emit(result); } """ },
2021년 10월 4일 월요일
블로그 접속 추이 변화(feat. 코로나)
본격적으로 블로그를 시작한 게 15년이니 햇수로 7년이 되어간다. 나름 우상향하는 페이지뷰 보는 재미에 꾸준할 수 있었지 않나 싶다. 17년부터 시작한 엘라스틱 관련 포스팅이 유입을 늘리는 데 도움이 됐다는 게 개인적인 생각. 그런데 20년 이후 하향세가 두드러진다(..)
2021년 9월 26일 일요일
2021년 9월 12일 일요일
정규표현식 몰라도 된다 - 2nd
정규표현식보다 데이터 이해도가 더 중요함은 엘라스틱도 마찬가지. 일단 간단한 예제 인덱스 생성.
POST _bulk{"index": {"_index": "test"}}{"url": "/path1/a.php"}{"index": {"_index": "test"}}{"url": "/path1/path2/b.php"}{"index": {"_index": "test"}}{"url": "/path1/path2/path3/c.php"}
2021년 9월 11일 토요일
정규표현식 몰라도 된다
5일 중 3일을 정규표현식에 할애한 과정을 진행하다가 아차(?) 싶었던 첫 강의가 생각난다. 그렇게 정규표현식 비중을 줄이고 줄여서 현재 정규표현식 과정은 반나절 정도(..) 그럼에도 빠지지 않는 질문이 쉬운 정규표현식? 대체 방법?
정규표현식이 쉬워지는 방법은 많이 써보는 수밖에 없다 보니 정규표현식을 사용하지 않고 원하는 테이블 구조를 만드는 방법에 대한 고민을 자주 한다. 일단 예제 데이터 생성.
| makeresults | eval url="/path1/a.php /path1/path2/b.php /path1/path2/path3/c.php"| makemv delim=" " url| mvexpand url| table url
2021년 9월 10일 금요일
Splunk의 진입장벽
엘라스틱 익숙해지는 데 6개월쯤 걸렸었다. 스플렁크는 한 달? 의외로 진입이 쉬웠다. (데이터 분석툴 관점에서) 엘라스틱도 쉽다고 생각했는데 더 쉬워서 놀람. 읽기 스키마와 특히 리눅스에 익숙할수록 친숙한 SPL(Search Processing Language)의 동작 방식 때문에 그러지 않았나 싶다.
다음은 간단한 테스트를 위해 makeresults 구문으로 예제 데이터를 생성하는 과정. | 기호를 이용해서 SPL이 데이터를 단계적으로 처리함을 알 수 있다.
① | makeresults ② | eval url="/path1/a.php /path1/path2/b.php /path1/path2/path3/c.php"③ | table url
2021년 9월 6일 월요일
CentOS의 Splunk
스플렁크 RPM 설치는 간단하다.
[root@Centos7 ~] rpm -i splunk-8.2.2-87344edfcdb4-linux-2.6-x86_64.rpmwarning: splunk-8.2.2-87344edfcdb4-linux-2.6-x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID b3cd4420: NOKEYuseradd: cannot create directory /opt/splunkcomplate[root@Centos7 ~][root@Centos7 ~] whereis splunksplunk: /opt/splunk/bin/splunk
2021년 8월 29일 일요일
Splunk로 알아보는 이상징후 분석
네 번째 책을 출간했다. 사실 스플렁크는 상업용이고, 프리 버전은 1일 500MB 저장 용량 제한이 있어서 관심 밖이었다.
그런데 엘라스틱의 조인 기능에 답답해하던 중 스플렁크는 조인을 지원한다는 얘기를 듣고 써보다가 책까지 쓰게 됨(..)
특히 데이터를 저장한 후에도 분석 목적에 따라 테이블 구조를 마음대로 바꿀 수 있는 스플렁크의 읽기 스키마는 신선한 충격으로 다가왔다.
물론 엘라스틱도 최신 버전은 읽기 스카마를 지원하지만 적용 방식이 개발자 친화적?이라 좀 까다로울 수 있다.
반면 스플렁크의 읽기 스키마는 기본 베이스라 아예 의식할 필요가 없음. 그냥 (조인 기능을 대수롭지 않게 만들어버릴 만큼 뛰어난 데이터 접근성을 보여주는) SPL을 이용해서 마치 (grep 등) 리눅스 명령어 사용하듯 데이터에만 집중하면 된다.
2021년 8월 16일 월요일
2021년 7월 27일 화요일
Splunk와 Winlogbeat 차이 - 2nd
winlogbeat는 ignore_older 옵션으로 수집 시간 범위를 결정할 수 있는 반면, 스플렁크는 좀 까다롭다. current_only와 checkpointInterval 조합을 통해 수집 데이터의 시간 범위를 결정하는 건 맞는데, 좀 더 정확히 하면
① 처음부터(current_only=0, 디폴트) 또는
② 스플렁크 실행 이후 시점부터(current_only=1) 수집, 두 가지만 선택할 수 있다.
다음 설정(Splunk\etc\system\local\inputs.conf)을 사용하면 'current_only=0'이 디폴트이기 때문에 전체 데이터를 수집한다.
[WinEventLog://Security]index = winevent
2021년 7월 26일 월요일
ignore_older
ignore_older는 수집 대상 로그의 시간 범위를 결정할 수 있게 해준다. 그런데 filebeat의 ignore_older와 winlogbeat의 ignore_older는 좀 다르다.
filebeat
filebeat의 ignore_older는 수집 대상 파일이 수정된 시간을 검사한다. 다음은 filebeat input 설정.
filebeat.inputs:- type: log enabled: true paths: - D:\ELK\filebeat-7.12.0-windows-x86_64\logs\* ignore_older: 24h
2021년 7월 20일 화요일
2021년 7월 19일 월요일
enrich processor
다음은 네트워크를 사용하는 프로세스 현황. 고작 1시간짜리 데이터인데 프로세스별 현황 파악이 쉽지 않다. 프로세스 범주를 좁힐 수는 없을까? 개발사별로 묶으면 딱인데. 하지만 네트워크 사용 이벤트(eventid: 5156)는 프로세스 개발사 정보를 가지고 있지 않다.
2021년 6월 24일 목요일
도메인 정규화 Processor: registered_domain
상태를 쪼개면 쪼갤수록 그 상태에 대해서 더 잘 알게 된다. 도메인 정보도 마찬가지. 그래서 엘라스틱은 서브 도메인과 상위 도메인을 쪼개주는 registered_domain processor를 제공한다. 다음은 beat processor 설정.
processors: - include_fields: fields: [ "winlog.event_data.QueryName", "winlog.event_id" ] - registered_domain: field: winlog.event_data.QueryName target_field: top_url target_etld_field: root_url target_subdomain_field: sub_url
2021년 6월 20일 일요일
2021년 6월 13일 일요일
2021년 6월 10일 목요일
Winlogbeat 7.13의 변화
다음은 7.12 버전의 input 설정.
winlogbeat.event_logs: - name: 'D:\eventlog\sample.evtx' processors: - script: lang: javascript id: sysmon file: ${path.home}/module/sysmon/config/winlogbeat-sysmon.js
2021년 6월 8일 화요일
대중의 직관
복잡계를 연구하는 수학자 존 L 캐스티의 2010년 저서. '사건이 분위기를 만든다'는 사회 통념(?)에 반하는, '분위기가 사건을 만든다'는 게 이 책의 주제.
일단 이 책은 거시경제학을 창시한 존 메이너드 케인즈로 시작한다. 케인즈 경제 이론의 기본 개념은 다음과 같다. (19페이지)
1. 외부 '충격 '은 없다: 오늘날 경제시장을 난타하는 폭풍우는 금융제도 자체... 시장의 안전성 자체가 불안정성의 불씨...
2. 네트워크: 사회는 여러 집단으로 구성... 사회는 '구구단 표의 항목들이 아니다. ' 이는 '동물적 감각'을 다르게 설명한 것...
(다양한 변수들의 복잡한 상호작용이 특징인 복잡계 사회는 이성적으로 설명하기 힘든 변화를 보일 때가 많다는 것. 저자는 이 부분에 꽂힌 듯)
2021년 5월 20일 목요일
2021년 5월 19일 수요일
Splunk의 대소문자 구분
스플렁크는 대소문자를 구분한다고 했는데 딱 하나 예외상황이 있다. 바로 search 명령을 사용할 때. 다음은 특정 index, EventCode, process_name 조건의 검색 결과. 소문자를 검색해도 대문자 검색 결과를 얻을 수 있다.
2021년 5월 9일 일요일
2021년 5월 7일 금요일
2021년 5월 6일 목요일
2021년 4월 28일 수요일
2021년 4월 19일 월요일
2021년 4월 18일 일요일
Filebeat의 processors
filebeat의 system 모듈은 윈도우에서 동작하지 않는다. system 모듈이 처리하는 messages나 secure 로그는 윈도우랑 관계가 없기 때문인 듯. (8.13 버전에서는 됨)
모듈 처리를 못하니 로그스태시로 보내든가, 직접 처리해야 한다. 로그스태시는 실컷 써봤으니 로그스태시 필터 역할을 하는 filebeat의 processors 옵션을 사용해보자. 다음은 input 설정.
filebeat.inputs:- type: log enabled: true paths: - d:\test.log
2021년 3월 29일 월요일
엘라스틱 Runtime field
흔히들 엘라스틱은 쓰기, 스플렁크는 읽기 스키마라고 하는데 이제 엘라스틱도 읽기 스키마를 지원한다. 스키마 구조를 디스크에 써야만 읽을 수 있으면 쓰기 스키마(전통적인 RDB 방식), 디스크에 쓰지 않고도 읽을 수 있으면 읽기 스키마.
스플렁크 문서를 보면 search-time field, index-time field란 용어가 자주 나오는데, srarch-time field에 해당하는 것이 엘라스틱의 런타임 필드. 사례를 보자. 다음은 timestamp만을 추출하는 필터 설정.
filter { mutate { remove_field => [ "path", "host", "@timestamp", "@version" ] } grok { match => { "message" => "^(?<timestamp>.{15})" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] remove_field => "timestamp" }}
2021년 3월 19일 금요일
2021년 3월 18일 목요일
Splunk의 Join
index=sysmon EventCode=3| stats count as sysmon_count by img_name| sort sysmon_count desc
① sysmon 인덱스에서 eventcode=3인 데이터만 불러온 후,
② img_name(프로세스)별로 집계한 다음,
③ 내림차순으로 정렬해주는 SPL(Search Process Language) 쿼리문을 사용했다.
2021년 3월 8일 월요일
카프카와 로그스태시 연동 시 참고
로그스태시 장애 발생 시 데이터 유실을 방지하기 위해 카프카를 많이 쓰는 듯하다. 그런데 카프카는 데이터를 보낼 때 직렬화(?) 과정을 거친다고.
Filebeat > Logstash
input { beats { port => 5044 }}
output { stdout {}}
2021년 3월 4일 목요일
2021년 2월 23일 화요일
2021년 2월 22일 월요일
데이터 분석이 쉬워지는 비법 - 2nd
종종 데이터 전처리를 쉽게 또는 자동으로 해주는 기능 없냐는 질문을 받을 때가 있다. 그런 기능 비슷한 게 있긴 있다. (Machine Learning > Data Visualizaer > Import data)
2021년 2월 8일 월요일
2021년 2월 7일 일요일
Logstash 필터 date - 3rd
간단한 파이프라인 설정.
filter { mutate { remove_field => [ "@timestamp", "@version", "path", "host" ] } dissect { mapping => { "message" => "%{timestamp} %{+timestamp} %{}" } } date { match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ] remove_field => "timestamp" }}
2021년 1월 31일 일요일
2021년 1월 24일 일요일
가치관의 탄생 - 시대의 필요가 우리의 생각을 정한다
가치관은 어떻게 탄생했을까? 일단 저자는 가치관의 범위를 '정치적, 경제적, 성별 위계(수직적 불평등)와 폭력에 대한 태도'로 제한한다. (25페이지)
그리고 인류사의 발전 과정을 에너지(칼로리) 획득 방식에 따라 수렵채집, 농경, 화석연료 단계로 나누고, 각 단계별 에너지 획득량의 증가와 함께 가치관도 변해왔다고 주장한다.
내용을 살펴보면,
수렵채집 가치관: 위계보다 평등을 중시하고, 폭력에 관대하다 (대략 20만 년 지속)
2021년 1월 21일 목요일
2021년 1월 14일 목요일
Logstash 필터 mutate - 3rd
데이터 분석 수준을 높이려다 보면 하나의 데이터를 이렇게도 바꿔보고, 저렇게도 바꿔보는 과정을 거치게 되는데, 이때 보통은 원본을 보존하기 위해 복사본을 사용한다.
filter { mutate { copy => { "원본" => "복사본" } }}
다음은 테스트 파이프라인과 실행 결과.
2021년 1월 12일 화요일
2021년 1월 1일 금요일
피드 구독하기:
글 (Atom)