Mac 키보드 및 마우스 로그를 Kibana로 시각화

6199 단어 syslogFluentdC
Mac에 Kibana 및 td-agent 설치 계속.

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 를 고려해 봅시다.

좋은 웹페이지 즐겨찾기