Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

OneDay Network

로그 파싱 및 로그 내용 데이터베이스화, 시각화(Bash,Influx,Grafana) 본문

System

로그 파싱 및 로그 내용 데이터베이스화, 시각화(Bash,Influx,Grafana)

programming 2020. 10. 12. 18:16

로그를 파싱하여 DB에 저장하고자 한다.

 

로그 파싱에 이용한 내용은 아래와 같다.

1. Bash(파싱 및 DB Insert)

2. InfluxDB(시계열 데이터베이스)

3. Grafana(시각화)

 

1. 로그 파싱 및 InfluxDB Insert(Bash,InfluxDB)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
  
new=`cat /var/log/error.log | wc -l`
old=`cat /var/log/error_old.log | wc -l`
set_num=`expr $old + 1`
echo $new $old $set_num
 
if [ $new == $old ]
then
        echo "not diff" > /dev/null
else
        new_log=`cat /var/log/error.log | sed -"$set_num",'\$p;'""`
 
        echo "$new_log" | while read line
        do
                #echo "$line"
                log_time=`echo $line | awk '{print $1}'`
                ip=`echo $line | awk '{print $2}'`
                user=`echo $line | awk '{sub(":","",$3); print $3}'`
                data_time=`echo $line | awk '{print $4 "/" $5}'`
                level=`echo $line | awk '{print $6}' | sed 's/[][]//g'`
                pid=`echo $line | awk '{sub(":","",$7); print $7}'`
                log=`echo $line | awk '{for(i=9;i<=NF;i++)printf("%s ", $i);printf("\n")}' | sed 's/"//g'`
                res=`echo logdata,ip=$ip,level=$level logtime=\"$log_time\",datatime=\"$data_time\",user=\"$user\",pid=\"$pid\",log=\"$log\"`
                curl --XPOST 'http://Your IP Address or Domain:8086/write?db=log_data' --data-binary "$res"
        done
        `cat /var/log/error.log > /var/log/error_old.log`
fi
cs

 

- old로그랑 new로그랑 로그 줄 수를 비교함

- 비교하여 바뀐줄을 db에 insert(로그는 순차적으로 쌓인다는 전제)

- 현재 로그를 old로그로 저장

 

 

2. 시각화(Grafana)

- IP or Level로 정렬하여 보면 관리가 편함. 

 

 

3. 자동 작업 수행 설정(crontab)

* * * * * /root/log.sh

- crontab -e를 눌러 등록(매 분마다 실행 하게 설정)

 

 

 

-> 필자는 로그 갯수가 많지 않아 간단히 작성한 쉘 스크립트이다. 

-> 빠른시간내에 다량의 로그가 발생하면 퍼포먼스의 문제가 생길 가능성이 높다. 

-> 전체 로그의 줄 수를 읽는 것이 아니라 old로그는 압축하는 방식을 통해 한 파일이 커지는 것을 방지 할 필요가 있어 보인다. 

-> 로그가 많다면 일정 시간에 한번에 db에 dump 형식으로 write하는 것이 바람직 할 것으로 보인다. 

 

 

'System' 카테고리의 다른 글

alert 시스템 구축하기(bash,slack webhooks)  (0) 2020.10.12
Comments