목표 : isms 관점에서 법령에 맞게끔 DB로깅을 하고 분석을 한다.
필요 로그정보 : "누가,언제,어디서,무엇을,어떻게" 의 5개 정도 나오면 된다고 본다.

general로그에는 모든 쿼리가 전부 쌓이고 있으니 확인이 가능하지만 general 로그 용량이 너무 커져서 select query는 안남도록 하고싶다.

확인해보니 select을 제외한 트랜잭션이 발생한 쿼리만 로깅하는게 바이너리로그다. (알고 있었는데 까먹었었다.)

 

바이너리로그를 보는법은 mysqlbinlog bin로고ㅡ파일명 > filename.sql 확인 가능하다 허나 bin log에는 ISMS에서 필요로 하는 누가와 어디서가 나오지 않는다. 따라서 isms의 개인정보처리시스템에 대한 로그는 general로그를 보관하는게 맞다.

 

내가 쓰고도 이글의 요지가 뭔지 모르겠는데... 이글을 처음 쓰게된 이유(목표)는 general로그 용량이 워낙 크니 select 쿼리는 빼자였는데... isms 관점에서는 빼면 안되는거였다. 애초에 생각을 깊이 하지 않아서 이런 똥글이 나왔다.

'job > mysql' 카테고리의 다른 글

pmm install  (0) 2022.07.13
mariadb columnstore 에 대하여  (0) 2021.06.16
mariadb install, undefined reference to `__rdtsc' err  (0) 2020.04.24
mysql 1032 에러 조치  (0) 2019.09.23
mysql 리플리케이션 마스터 - 슬레이브간 지연  (0) 2019.08.05

Jul 11 03:37:14 db1 systemd: Created slice libcontainer_16098_systemd_test_default.slice.
Jul 11 03:37:14 db1 systemd: Removed slice libcontainer_16098_systemd_test_default.slice.
Jul 11 03:37:14 db1 systemd: Scope libcontainer-16126-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:14 db1 systemd: Scope libcontainer-16126-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:14 db1 systemd: Created slice libcontainer_16126_systemd_test_default.slice.
Jul 11 03:37:14 db1 systemd: Removed slice libcontainer_16126_systemd_test_default.slice.
Jul 11 03:37:14 db1 systemd: Scope libcontainer-16153-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:14 db1 systemd: Scope libcontainer-16153-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:14 db1 systemd: Created slice libcontainer_16153_systemd_test_default.slice.
Jul 11 03:37:14 db1 systemd: Removed slice libcontainer_16153_systemd_test_default.slice.
Jul 11 03:37:15 db1 systemd: Scope libcontainer-16180-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:15 db1 systemd: Scope libcontainer-16180-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:15 db1 systemd: Created slice libcontainer_16180_systemd_test_default.slice.
Jul 11 03:37:15 db1 systemd: Removed slice libcontainer_16180_systemd_test_default.slice.
Jul 11 03:37:15 db1 systemd: Scope libcontainer-16207-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:15 db1 systemd: Scope libcontainer-16207-systemd-test-default-dependencies.scope has no PIDs. Refusing.
Jul 11 03:37:15 db1 systemd: Created slice libcontainer_16207_systemd_test_default.slice.

 

 

위와같은 에러가 message 로그에 대량(초당 3~4회씩반복)으로 남고있어, 메세지로그확인이 상당히 어렵다.

 

하여 아래와 같이 원인 분석 및 조치를 진행했다.

 

 

1. 해당 로그가 쌓이는 원인 파악
https://github.com/kubernetes/kubernetes/issues/71887

https://github.com/moby/moby/issues/30628

 

위 내용들을 종합해보자면 docker 의 native cgroup driver를 native.cgroupdriver=systemd 으로 사용하고 있는데 

systemd에 의해 잘 실행 되는지 컨테이너 런타임(runC)이 잘 실행되는지 확인하기 위한 일시적인 테스트라고 한다.
테스트로 컨테이너를 생성하는데 pid가 없으니까 생성/삭제하는건가... 이 이상으로 설명이 돼 있는건 구글링해도 찾을수가없었다.

여튼 해당 메세지 자체가 있다고해서 서버나 운영환경에 문제를 야기할껀 아니라고 판단된되니 로그를 안쌓도록 하면 될것같다.

 

2. 해당 로그를 안쌓도록 하는 방법

근본적으로 도커 컨테이너에서 설정을통해 안쌓도록 하고 싶지만 구글링시 안나오고 있다. 따라서 rsyslog에서 해당 로그는 쌓이지 않도록 설정한다.

[root@db1 rsyslog.d]# pwd
/etc/rsyslog.d
[root@db1 rsyslog.d]#
[root@db1 rsyslog.d]#
[root@db1 rsyslog.d]# cat ignore-container-log.conf
if ($programname == "systemd") and ($msg contains "_systemd_test_default.slice" or$msg contains "systemd-test-default-dependencies.scope") then {
  stop
}

위와 같이 rsyslog.d 에 ignore 설정파일 하나 만들어서 메세지 같으면 안쌓이도록 설정 

'job > linux' 카테고리의 다른 글

간헐적 500 Server Internal Error 원인 파악하기  (0) 2022.11.10
du -sch --exclude  (0) 2022.07.11
gitlab - elasticsearch intergration  (0) 2021.02.16
centos 5 iptables에 geoip 올리기(2020-03-05)  (0) 2020.03.05
pgsql 해킹 프로세스  (0) 2019.12.30

벤포드의 법칙이란걸 접했다. 상당히 흥미가 갔다. 내가 하는 업무가 빅데이터를 다루기도 하고… 데이터 검증을 해야 하기도 하니….상당히 흥미가 갔다.
도입부 설명이 아래와 같았다.
1~100만의 숫자중 랜덤으로 100만번 선택했을 경우 골라진 숫자의 맨 첫자리 숫자가 1일 확률이 가장 높고 그다음이 2.. 3…
이게 실제로 적용되는지 스크립트로 짜서 돌려봤다. 

굉장히 신기했다. 이게 말이 돼 ? 랜덤으로 뽑는건데 ? 실제로 적용되는지 궁금했다.

 

 

-MacBookPro benford % cat sss.sh

#!/bin/sh

 

num=1

 

while [ $num -le 1000000 ]

do

random_num="$(($RANDOM% 9999+1))"

first_num="${random_num:0:1}"

echo "$first_num" >> 123123.txt

((num++))

done

 

랜덤함수가 32767 까지밖에 안나오니 1부터 9999까지 랜덤으로 뽑도록 해보고… 결과는 아래와 같다.

 

MacBookPro benford % cat 123123.txt | sort | uniq -c

135337 1

128771 2

105152 3

105292 4

105207 5

105114 6

105024 7

105305 8

104798 9

1이랑 2가 많긴 하지만…이건 벤포드의 법칙보다는 내가 뭔가 간과한 부분이 있는것같다. 어쨌든 벤포드의 법칙을 설명할 때 적잖은 유튜버, 블로거들이 했던 설명인"1~100만의 숫자중 랜덤으로 100만번 선택했을 경우 골라진 숫자의 맨 첫자리 숫자가 1일 확률이 가장 높고" 은 잘못된 예제같다. 일단 패스.

 

벤포드의 법칙이 적용되려면 광범위한 데이터여야 하고 비선형의구조를 보이는? 데이터여야 한다고 한다.(정확히 이해한건지 모르겠다..)
그럼 진짜로 이게 실 데이터에 적용되는지… 실제 회사내의 데이터를 가지고 확인해보았다.

약 200 개 앱(게임)들의 365일간의 일일 매출들. 즉 약 7만개(200개 앱 * 365일)데이터가 벤포드 법칙에 적용이 되는지 확인해보았다.

 

결과는

 

MacBookPro benford % awk '{print $2}' benford.txt| sort | uniq -c

14610 1 (33프로) 

8585 2 (18프로) 

4893 3 (10프로) 

4447 4 (9.6프로) 

3479 5 (7.5프로) 

3013 6 (6.5프로)

2116 7 (4.6프로)

1870 8 (4프로)

2002 9 (4.3프로)

null값이나 오입력된 값(0 입력)등도 있어서 퍼센티지가 100이 되진 않는다.

 

이정도면 상당히 적용된다고 볼수 있다. 신기하다… 근데 9로 시작하는게 많네… 벤포드 법칙에 따르면 9로 시작하는 값들중 오입력된 값들이 많다는 뜻이겠다. 또한 1로 시작하는게 실제 벤포드의 법칙보다는 수치가 살짝 높고 그렇다. 

9로 시작하는 값들을 먼저 봐볼까..

MacBookPro benford % cat benford.txt| awk '{ if ($2==9) print $1}' |  sort -n | uniq -c  | sort -rn | more
 189 9.99
 135 9.98
  28 9.97
  25 9.95
  11 9.96
   6 9.9
   6 9.2161
   4 9.94
   4 9.59

 

9.99 가 굉장히 수상하다.

 

        "d250": 9.99,
        "d251": 1.99,
        "d252": 15.99,
        "d253": null,
        "d254": 4.99,
        "d255": 4.99,
        "d256": 9.99,
        "d257": null,
        "d258": 3.98,
        "d259": 9.99,
        "d260": 8.98,
        "d261": 19.97,
        "d262": 1.99,
        "d263": 14.97,
        "d264": 9.99,

 

위와같이 1.99 2.99 9.99 등 오입력된 값들이 많음을 실제로도 볼 수 있었다. 왜 오입력이 됐는지는 개발자들에게 문의를 해야할것이고 ... 매출이 n.99 가 나올 가능성이 얼마 안될 듯 한데... 저것들 다 오입력된것같다. 그중 1.99나 2.99 등은 워낙 분포가 많으니 티가 안났겠지만 9의 경우 분포가 작으니 이렇게 티가 나는듯 ? 

여튼 데이터가 잘못된것을 찾아냈다. 상당히 유의미하다. 
처음 접했을땐 말이되나 ? 신기하다. 였는데  벤포드의 법칙에 대해서 위키등 설명을 더 자세히 읽어보니 이런 데이터가 나오는게 수긍이간다. 1 > 2로 가려면 2배 2 > 3은 1.5배 3 > 4는 1.3배....  점점 진입하기가 쉬워지기 때문이다.

 

흠..이걸 실제 데이터 검증에 쓸 수 있는 방법은 없을까 ? 서버 파일들의 용량을 점검한다면 ?

 

#!/bin/sh
ls -latr /bin/ | grep -v lrwx | awk '{print $5}' > /root/sss.txt
num=`cat /root/sss.txt`
for i in $num; do
first_num="${i:0:1}"
echo "$i $first_num" >> benford1.txt
done
awk '{print $2}' benford1.txt | sort | uniq -c

 

 

위와 같이 /bin/ 디렉토리내 파일들의 용량도 벤포드의 법칙이 적용된다. 변조여부 확인하는데 참고정도는 할 수 있을지도 ?

'일상 > 기타' 카테고리의 다른 글

ISMS인증 안내서 요약  (0) 2021.04.27

+ Recent posts