Mac 키보드 및 마우스 로그를 Kibana로 시각화
Kibana라든지 사용해 보고 싶다고는 생각하고 있지만, 흘리는 로그는 없고… 라고 생각하고 있는 사람에게 준다.
자신의 PC의 이벤트 로그라면 수중만으로 완결하고, 로그의 양도 나름대로 있고, 데이터로서도 재미있다.
키보드와 마우스 로그를 syslog에 보내는 데몬 만들기
↓ 이런 50행 정도의 프로그램을 만들었다.
CGEvent는 맥의 다양한 이벤트의 콜백을 설정하는 인터페이스로, asl은 맥의 syslog 래퍼.
이제 컴파일 할 수 있습니다.
$ clang macbooklog.m -o macbooklog -framework Cocoa
또는, 리포지토리 에
Makefile
를 두고 있으므로,$ make
좋다.
키보드 로그를 얻으려면 루트로 실행해야합니다. (마우스만이라면 루트 필요 없음)
데몬으로서 기동해 두면 좋기 때문에, plist를 설치.
$ sudo cp macbooklog /usr/sbin/macbooklog
$ sudo cp macbooklog.plist /Library/LaunchDaemons/
데몬을 시작합니다.
$ sudo launchctl load /Library/LaunchDaemons/macbooklog.plist
이제
/var/log/system.log
를 tail하면 로그를 볼 수 있다.키 코드도 얻으려면
리포지토리 의 코드 그대로는 키보드의 이벤트만을 내도록 하고 있어, 키 코드를 로그에 포함하고 있지 않다. 포함하는 경우는 좋게 코멘트를 제외하거나 하면 되지만, 키 로그 내고 있으면 패스워드를 타인에게 알려질 가능성이 있으므로 자기 책임으로 해 주세요.
syslog (ASL) 설정
위의 상태에서도 보통의 syslog에 로그가 흘러 오는데, 한가지 곤란한 일이 있고, 20초 이내에 같은 로그가 있었을 경우는
--- last message repeated 17 times ---
처럼 되어 버린 것 같다. (coalesce되는 것 같다)
syslog의 설정으로, macbooklog의 경우만 coalesce를 오프로 해 드디어 다른 로그 파일에 내도록(듯이) 해 두자. fluentd의 설정에서도 그쪽만을 tail하면 좋기 때문에 불필요한 처리하지 않아도 좋을 것 같다.
ASL은 syslog 래퍼.
/etc/syslog.conf
와는 별도로 /etc/asl.conf
라는 것이 있다. 둘 다 사용할 수 있는 것 같지만, asl.conf 쪽에 설정이 몇개인가 써 있으므로 그쪽을 사용한다. asl.conf에서는 로그 로테이트의 설정을 할 수 있는 것이 편리./etc/asl.conf
자체에 쓰면 OS 업데이트로 덮어쓸 가능성이 있기 때문에 /etc/asl/macbooklog
에 ↓의 파일을 둔다.# write macbooklog's log to macbooklog.log and do not coalesce
? [= Facility macbooklog] claim only
* file /var/log/macbooklog.log file_max=1M all_max=5M coalesce=false
macbooklog의 로그는
/var/log/macbooklog.log
라는 파일에 걸려, 1MB마다 로그 로테이트 되어, 전부 5MB가 되면 낡은 것으로부터 지워진다. coalesce는 하지 않는다는 뜻.그리고는 syslogd를 재기동.
$ sudo launchctl stop com.apple.syslogd
$ sudo launchctl start com.apple.syslogd
/var/log/macbooklog.log
를 보면 이런 느낌에 로그가 나오고 있을 것이다.Sep 6 10:25:32 Atsushis-MacBook-Pro.local macbooklog[22757] <Notice>: kCGEventKey:3
Sep 6 10:25:33 Atsushis-MacBook-Pro.local macbooklog[22757] <Notice>: kCGEventKey:36
Sep 6 10:25:33 Atsushis-MacBook-Pro.local macbooklog[22757] <Notice>: kCGEventMouseMoved
Sep 6 10:25:33 Atsushis-MacBook-Pro.local macbooklog[22757] <Notice>: kCGEventMouseMoved
Sep 6 10:25:33 Atsushis-MacBook-Pro.local macbooklog[22757] <Notice>: kCGEventMouseMoved
쉽게 설치할 수 있습니다.
여기까지의 일을
make install
로 해 주도록(듯이) 했다.$ sudo make install
cp macbooklog /usr/sbin/macbooklog
cp macbooklog.plist /Library/LaunchDaemons/macbooklog.plist
launchctl load /Library/LaunchDaemons/macbooklog.plist
launchctl stop macbooklog
launchctl start macbooklog
cp macbooklog.asl.conf /etc/asl/macbooklog
launchctl stop com.apple.syslogd
launchctl start com.apple.syslogd
제거는
make uninstall
$ sudo make uninstall
rm /usr/sbin/macbooklog
launchctl unload /Library/LaunchDaemons/macbooklog.plist
rm /Library/LaunchDaemons/macbooklog.plist
rm /etc/asl/macbooklog
launchctl stop com.apple.syslogd
launchctl start com.apple.syslogd
fluentd에서 syslog 읽기
td-agent를 사용하고 있으므로
/etc/td-agent/td-agent.conf
에 다음과 같이 쓰면 syslog를 읽을 수 있습니다.<source>
type tail
path /var/log/macbooklog.log
pos_file /tmp/macbooklog.pos
tag macbooklog
format syslog
</source>
ElasticSearch에 흘리는 곳까지 포함하면 이렇게 되었다.
<source>
type tail
path /var/log/macbooklog.log
pos_file /tmp/macbooklog.pos
tag macbooklog
format syslog
</source>
<match macbooklog>
type rewrite_tag_filter
rewriterule1 message ^kCGEventKey macbooklog.key
rewriterule2 message ^kCGEventScrollWheel$ raw_macbooklog.mouse.scroll
rewriterule3 message ^kCGEventMouseMoved$ raw_macbooklog.mouse.move
rewriterule4 message ^kCGEventLeftMouseDown$ macbooklog.mouse.click
rewriterule5 message ^kCGEventRightMouseDown$ macbooklog.mouse.click
</match>
<match raw_macbooklog.**>
type sampling_filter
interval 10
remove_prefix raw_macbooklog
add_prefix macbooklog
</match>
<match macbooklog.**>
type elasticsearch
host localhost
port 9200
logstash_format true
logstash_prefix macbooklog
include_tag_key true
tag_key event
</match>
마우스의 로그가 키보드에 비해 상당히 많기 때문에, 적당하게 샘플링해 준다. (위의 설정에서는 10분의 1)
fluent-plugin-sampling-filter 필요.
sudo /opt/td-agent/embedded/bin/fluent-gem install fluent-plugin-sampling-filter
키 코드도 로그에 포함하는 경우는 fluent-plugin-parser 를 사용해 잘 한다. ( 리포지토리의 README에 설정 예를 썼다)
이상
Kibana의 디폴트의 logstash 형식 대시보드의 설정을 좋은 느낌으로 만드면, 간단하게 이런 그래프를 만들 수 있다.
언제 자고 있는지 일목요연!
아침에는 vim으로 코드를 썼기 때문에 JKL이 많았다.
이것만이라면 ElasticSearch에 계속 쌓이기 때문에, 낡은 로그는 지우거나 하지 않으면 안 된다. htps : // 기주 b. 코 m / 에 s 치 c 세아 rch / 쿠라 토 r 를 고려해 봅시다.
Reference
이 문제에 관하여(Mac 키보드 및 마우스 로그를 Kibana로 시각화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/edvakf@github/items/721afa8d2e69c556ba64텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)