강 명훈(mhkang)http://kangmyounghun.blogspot.com

2022-05-15
빅데이터가 대세 키워드였던 몇 년 전까지만 해도 하둡 등의 인프라가 모든 것을 해결해줄 듯한 분위기였다면, 알파고 이후엔 수학 및 통계학, 그리고 그런 지식에 기반한 모델링 능력이 필수 자질로 꼽히는 세상이 되었다. 광고, 추천, 번역, 금융 등 많은 분야에서 그런 자질을 요구한다. 열거한 분야들의 공통점은 최종 목적이 결국 돈이라는 것. 돈을 벌기 위해서는 사람의 심리나 행동을 예측해야 한다. 절대 쉽지 않은 작업. 아마 작두 타는 수준의 분석 능력이 필요할 것이다. 복잡한 수학/통계 지식의 필요성에 수긍이 가는 대목....
2021-09-30
5일 중 3일을 정규표현식에 할애한 과정을 진행하다가 아차 (?) 싶었던 첫 강의가 생각난다. 그렇게 정규표현식 비중을 줄이고 줄여서 현재 정규표현식 과정은 반나절 정도 (..) 그럼에도 빠지지 않는 질문이 쉬운 정규표현식? 대체 방법? 정규표현식이 쉬워지는 방법은 많이 써보는 수밖에 없다 보니 정규표현식을 사용하지 않고 원하는 테이블 구조를 만드는 방법에 대한 고민을 자주 한다. 일단 엘라스틱 예제 데이터 생성. url 데이터에서 file 정보를 추출해보자. 다음은 읽기 스키마 기반의 런타임 필드 생성 쿼리....
2021-07-04
다음은 root 사용자의 IP별 접속 현황. 5월 14~16일 및 6월 12일의 IP 변화가 눈에 띈다. 그런데 사용자가 많다면 사용자별 접속 IP의 변화 확인이 꽤 까다로울 것이다. 더 직관적인, 한 눈에 IP 변화를 알아차릴 수 있는 차트를 그릴 수는 없을까? 다음은 root 사용자의 IP 고유 개수 변화. 6월 12일의 변화는 뚜렷한데, 5월 14~16일의 변화는 보이지 않는다. 해당 시점의 접속 IP가 평소와 다른 건 맞지만 유형은 하나뿐이니 당연한 결과. IP 변화를 숫자 변화로 이상징후 분석은 통계 분석의 다른 말이고, 결국 특정 상태의 숫자 변화를 추적하는 과정. 마침 IP는 숫자로도 표현할 수 있다. 8bit 단위로 나눈 IP를 순서대로 256...
2021-03-07
엘라스틱이 sql을 지원하기 시작한지 꽤 됐는데 조인은 아직이다. 그런데 아마존이 배포하는 opendistro 는 조인을 지원한다. 물론 아직 조인 내부적으로 집계도 안 되고, 서브 쿼리도 안 먹고 등등 많이 부족함. [caption id="attachment_28234" align="aligncenter" width="600"] 중복 제거 좀..[/caption] 하지만 외부 조인까지 지원하는 걸 보면, 빠르게 기능 개선이 이루어지지 않을까 싶다. 아마존이 이렇게 발 빠르게 움직인다면 엘라스틱도 가만 있지 않겠지? 그나저나 엘라스틱이 아마존을 겨냥한 라이센스를 발표하고, 아마존은 직접 엘라스틱을 배포하면서 서로 완전히 등을 돌린 모양새던데, 둘의 대립이 어떻게 결론 날지 궁금하다....
2020-11-16
단순 카운트 변화 추이는 로그의 상태를 정확히 표현하지 못한다. 다양한 상태 정보가 섞여 있는 상태에서 개수의 변화가 어떤 상태를 특정하는지 알기 힘들다는 얘기. count 추이(12~25일) 그래서 강조하는 게 상태별 고유성 확보를 통한 데이터 해상도 변경 및 다양한 Metric 활용. 카운트 추이로는 알 수 없었던 19일의 상태 변화가 해상도 및 Metric 변경을 통해 드러난다. URL 고유 개수 백분위 90% 의 변수 길이 이런 결과를 얻기 위해 데이터를 분류하고, 고유성을 확보하고, 효과적인 지표를 개발하는 데 많은 시간을 투자한다. 그러나 그런 노력을 들이고도 정작 쌓인 데이터를 분석하지 않는다면 모든 노력은 물거품이 되고 만다. 반면 정말 단순하게 로그 개수만 센다 해도 매일, 매 시간, 매 분 데이터의 변화를 궁금해한다면 그 데이터에서 의미를 찾아낼 수 있다....
2020-08-08
소프트웨어 세상에서 제발 건설식  비유가 사라지면 좋겠습니다. 건설업은 시설을 중심에 놓고, 사람을 부품으로 사용하는 생산체계입니다. 매번 맨땅에서부터 시작해야 하니 그런게 이해됩니다. 하지만, 소프트웨어 세상에선 그런걸 잘했다고 돈을 더벌진 않죠. 그냥 잘팔리는 제품을 만들어야 합니다. 즉, 소프트웨어 세계에선 사람이 비용이 아니라 투자대상입니다. IT 분야에서 남다른 통찰력을 보여주는 김수보님의 최근 글. IT 환경과 함께 변해온 개발 문화/방법론 및 변화 배경을 읽을 수 있다. 정말 오래된, 개발 분야에 건설 방법론을 적용하지 말자는 떡밥인데 개인적으로 해결책은 간단하다고 생각한다. 글 안에 답이 있다....
2020-05-14
엘라스틱 머신러닝이 7.6 버전부터 지도학습 (supervised learning) 을 지원한다. 얼마나 잘 동작하는지 IDS 로그에 적용해보자. 다음 글을 참고했다. 새로 나온 이 영화 재미있을까? 학습 데이터는 1로 라벨링된 887개의 정탐과 0으로 라벨링된 6,700여 개의 오탐이 섞인 제일 만만한 sql injection 탐지 로그. 정탐 오탐 모델 학습 학습 데이터를 sqland-learning이란 인덱스에 저장 후, Machine Learning > Data Frame Analysis > Create analytics job 메뉴 클릭. ① 작업 유형은 classification...
2020-04-26
0과 1로 구분된 데이터가 있다. 그런데 이상하게 구분값 1은 0, 0은 1로 바꾸고 싶네? 치환 명령어 ' %s/1$/0/ '와 ' %s/0$/1/ '를 순서대로 실행하면 1 -> 0, 0 -> 1로 바뀔까? 첫 번째 작업에서 1이 사라지고 0만 남기 때문에, 결과적으로 마지막엔 1만 남는다. 이럴 때 흔히 쓰이는 꼼수 ① 0 -> 1 치환 시 중복을 막기 위해 1 -> 11로 잠시 피신. ② 0 -> 1 치환 ③ 11 -> 0 치환 이게 귀찮다면? 구글신께 물어봤다. 오~ 조건 치환이 가능하단다. Conditional replace in vim ① 정규표현식 '...
2020-03-29
지난 글 에서 elapsed 필터로 멀티 라인 구조를 갖는 하나의 트랜잭션 실행 시간을 구해봤는데 멀티 코어가 멀티 라인 로그를 나눠 처리하는 로그스태시의 동작 방식 때문에 잘 되지 않았다. 그렇다고 싱글 코어를 쓰자니 로그양이 너무 많고 (..) test.log 멀티 라인 구조를 싱글 라인으로 바꿔보자. Logstash codec 플러그인 중 multiline 은 서로 다른 시점에 발생한 여러 개의 로그를 특정 조건으로 합쳐준다. 다음은 message 필드에 'EndJob' 패턴이 존재하면 직전 (previous)...
2020-02-12
특정 작업의 생성부터 소멸까지의 수명 주기가 jobID라는 식별자로 구분되는 로그가 있다. 하나의 작업에 소요된 시간을 구해보자. 마지막 작업이 실행된 시간에서 최초 작업 실행 시간을 빼면 된다. 근데 어떻게 하지? 가장 간단한 방법은 서로 다른 시점에 발생한 두 로그 간의 시간차를 계산해주는 로그스태시 필터 플러그인 elapsed 를 사용하는 것. 다음은 파이프라인 설정. 작업을 시작할 때는 send_begin, 작업이 끝날 때는 send_end 태그를 추가했으며, elapsed 플러그인은 해당 태그를 이용해서 계산이 필요한 시간대의 시작과 끝을 결정한다....
더보기