response time 순으로 정렬할때 사용했음. (에이전트 스트링 및 컬럼 차이가 있어 '"' 로 구분해야했음 valxpkt01 기준)
cut -d "\"" -f1,2,7 a > b
cat b |sort -k 10 -nr |more

cut -d "\"" -f1,2,3,7 a > c
cat c |sort -k 11 -nr |more

참고
https://jupiny.com/2017/07/09/linux-command-4-cut-sort-uniq-wc/



netstat 결과 상태값에 따른 카운팅
netstat -n|awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
[atlxnginx1]/k3> netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 21
ESTABLISHED 25
LISTEN 14


IP 기준으로 특정컬럼 수치가 999999 이상인 것들에 대한 카운트
cat access_log.20190910 | awk '{print $1, $15}' | awk '{if($2 > 999999) {arr[$1]+=1}} END{for (i in arr) {print i "\t" ":" arr[i]}}'


확장자가 .php 또는 .cgi 에 대해 요청 카운트 횟수 추출
tail -1000 access_log | awk -F '?' '/\.(cgi|php)/{split($1,ret," "); print ret[1],ret[7];}' | sort | uniq -c |sort -nr 


참고 : http://o5o5o.dyndns.org/wp/?p=740
         awk –F ‘ ‘ ‘{split($1,ip,”.”); printf(“%03d.%03d.%03d.%03d %s\n”, ip[1], ip[2], ip[3], ip[4], $2);}’



가끔 아파치 로그를 이용하여

시분초 단위로 어느정도 처리하는지 숫자를 뽑는 경우가 있는데

그때 사용하는  awk 입니다.

더 이쁘게 만들어 주시면 감사하겠습니다.

 

#####################################################################

 

초단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d%02d%02d\n",ret[1],ret[2],ret[3],ret[4])}' <access_log file> | uniq -c

 

분단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d%02d\n",ret[1],ret[2],ret[3])}'  <access_log file>  | uniq -c

 

시간단위 리퀘스트

awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d\n",ret[1],ret[2])}' <access_log file>  | uniq -c

 

 

주의

conf 상 log 포맷이 "%h %l %u %t \"%r\" %>s %b" 이어야 합니다. 아니면 수정해야됨..

(112.156.90.240 - - [26/Jan/2012:15:51:17 +0900] "GET  /favorite_api.php?szBjId=hummer9427&szWork=SELECTBOX&szScriptVar=oFavoriteList HTTP/1.1" 200 2119)

 

 

 

예제

 awk -F ' ' '{ gsub(/\[/,"");split($4,ret,":");printf ("%s%02d\n",ret[1],ret[2])}' /logs/access_log| uniq -c

 

 

결과

    476 26/Jan/20121554

    455 26/Jan/20121555

    456 26/Jan/20121556

    461 26/Jan/20121557

    452 26/Jan/20121558

    451 26/Jan/20121559

    437 26/Jan/20121600

    445 26/Jan/20121601

    425 26/Jan/20121602

    423 26/Jan/20121603

    440 26/Jan/20121604

    432 26/Jan/20121605

    456 26/Jan/20121606

    528 26/Jan/20121607

    492 26/Jan/20121608

    551 26/Jan/20121609

    654 26/Jan/20121610

    491 26/Jan/20121611 


사이즈가 200k 이상인 것을 요청수로 오더링

cat access_log.afreeca | awk -F '?' '{split($1,ret," "); print ret[1],ret[7];}' | sort | uniq -c |sort -nr 
cat access_log.afreeca | awk '/ 200 /{ print $7,$9,$10;}' | more | sort | uniq -c |sort -nr 

cat a | awk '$3>200000; {split($1,ret,"?");print $3, "http://www.afreec.com/"ret[1], $2}' > b



awk single quote 출력

awk -v q=\' 'BEGIN{print q}'
awk 'BEGIN{print "\x27"}'
awk 'BEGIN{print "\047"}'



  Linux 서버를 운영하다 보면, 아파치 또는 톰캣의 Access로그를 이용하여, 접속 통계를 추출하고자 할 때가 있다.

특정 IP가 유난히 많이 유입된다거나, 시간대별로 유입 건수 또는 파라미터 값 별로 유입되는 건 수

HTTP 결과 코드별로 에러가 몇건인지 등을 파악하기 위해서다.

  분석을 위해서는 grep명령과 awk명령이 사용된다. 물론, 통계 추출 후 데이터 정렬을 위해 sort명령도 사용된다.


 아래와 같은 형식으로 쓰여진 아파치 Access로그 파일 access.log가 있다고 하자.

access.log 파일을 분석하여 통계를 추출해 보자.

221.62.138.27 - - [16/Mar/2017:13:18:22 +0900] "POST /app/service.jsp?COMMAND=12&SVC_TYPE=2&SONG_ID=8045575 HTTP/1.1" 200 601 59213 "-" "-"

1. IP별로 접속 건 수 구하기

cat access.log | awk '{print $1}' | awk '{ arr[$1]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}'


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

221.62.138.72  : 543

223.35.12.46    : 24

223.64.210.156 : 2341


명령을 분석하자면,

cat으로 access.log 파일을 열고, awk로 IP데이터인 첫번째 필드를 추출한 뒤,

첫번째 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서

"필드값 [탭] : count된 값" 형태로 출력하는 명령이다.



2. 시간대별 접속 건 수 구하기

cat access.log | awk '{print $4}' | awk -F":" '{ arr[$2]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}' | sort


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

01 : 8431

01 : 3921

02 : 2314

03 : 1341

...

22 : 71932

23 : 24932


명령을 분석하자면, 위와 같은 방식으로

cat으로 access.log 파일을 열고, awk로 시간 데이터인 4번째 필드를 추출하 뒤, 추출한 필드에서 다시 ":"를 구분자로 2번째 필드(시간)를 추출하여 해당 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서 "필드값 [탭] : count된 값" 형태로 출력하고 이를 첫번째 필드 기준으로 정렬하는 명령이다.



3. HTTP 결과 코드별 접속 건 수 구하기

cat access.log | awk '{print $9}' | awk '{ arr[$1]+=1} END{ for (i in arr) {print i "\t" ":" arr[i]}}' | sort


위와 같이 명령어를 입력하면, 출력되는 결과는 다음과 같다.

200 : 2434314

401 : 921

404 : 8314

500 : 15


명령을 분석하자면, 같은 방식으로

cat으로 access.log 파일을 열고, awk로 HTTP 결과 코드인 9번째 필드를  추출하여 해당 필드가 같은 데이터면 +1 하여 count하고 그 결과를 for loop 돌면서 "필드값 [탭] : count된 값" 형태로 출력하고 이를 첫번째 필드 기준으로 정렬하는 명령이다.



여기에서, 여러 파일의 파일 예를 들어, 2월 한달간의 access.log 파일들 등에서 통계를 구하고자 한다던가 특정 값이 포함된 접속 이력만을 대상으로 하고자 할 경우에는

grep명령으로 대상이 되는 라인만을 추출한 뒤, 파이프 라인으로 위의 명령어를 응용하여 구성하면 된다.


이상 끝.





개발자들이 개성이 강한지라

vim 상에서도 신텍스 하이라이팅을 다르게 하고 싶은 욕구가 있으셨을 것입니다.

그래서 vim 에서는 컬러스키마를 제공하구요

그게 아래와 같이 .vimrc 파일을 수정하면 변경이 가능하지요.

colorscheme <스키마이름>

제가 공유한 링크는 스키마를 한눈에 볼수 있는 페이지입니다.

구경해보세요.


<domain> <type> <item> <value>


<domain> : 값을 적용시킬 범위. userid, groupid, *, % 가 올 수 있다
  - userid : 특정 유저아이디에만 적용
  - groupid : 그룹아이디에만 적용
  - * : 전부
  - % : *와 동일하나 maxlogins 설정에만 사용?

<type>
 - 'hard' : root 와 kernel 에 의해 설정이 되게하며 user는 설정된 값 이상으로 변경 불가
 - 'soft' : user 가 얼마든지 설정값을 변경가능
 - '-' : hard 와 soft 둘다 설정
 
나머지는 limits.conf 열어보면 설명 잘 나와있음.


크론은 기본적으로 환경변수를 상속 받지 않는다..

그래서 환경변수를 사용하기 위해서는 기본쉘(/bin/sh) 로 한번더 랩핑을 하거나 shell script 로 코딩을 한다. 

그래서 php 로 만든 스크립트내에서 환경 변수를 사용하고 이를 크론에 등록할시엔

 반드시 쉘로 랩핑을 해주어야함.

 

 아래는 등록 및 코딩 예입니다.

 

*/1 * * * * *  /home/tmp/aa.sh

 

---------- /home/tmp/aa.sh -----------

 1 #!/bin/sh

 2 HOSTNAME=`/bin/hostname`

 3 export HOSTNAME

 4 /home/tmp/aa.php

----------// /home/tmp/aa.sh -----------

 

 

---------- /home/tmp/aa.php -----------

#!/home/bin/www/php -q

<?php

$szHostnameStr = $_SERVER['HOSTNAME'];

 

if($szHostnameStr == "umdooserver") { echo "개발서버"; } else { echo "실서버"; }

?>

----------// /home/tmp/aa.php -----------


기본으로 리눅스를 설치하고 터미널을 xterm 으로 설정후

'ls' 를 날려보면

OTL

눈이 아플 정도로 디렉토리 색깔이 너무 파랗다~

그래서 설정을 변경해 보았다..

# cp /etc/DIR_COLORS.xterm ~/.dir_colors

복사후 vi 로 .dir_colors 파일을 편집해보자..

뚜껑을 열고 42라인 정도로 이동하면 아래와 같이 나온다..

# Below are the color init strings for the basic file types. A color init
# string consists of one or more of the following numeric codes:
# Attribute codes:
# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
# Text color codes:
# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
# Background color codes:
# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
NORMAL 00   # global default, although everything should be something.
FILE 00     # normal file
#DIR 00;34   # directory   <--- 기본설정
DIR 01;31   # directory
LINK 00;36  # symbolic link
FIFO 40;33  # pipe
SOCK 00;35  # socket
BLK 40;33;01    # block device driver
CHR 40;33;01    # character device driver
ORPHAN 01;05;37;41  # orphaned syminks
MISSING 01;05;37;41 # ... and the files they point to

위와 같이 변경후 터미널을 재 접속하면.. .두둥...

당신의 눈은 훨씬편해져 있을 것이다~~ ^^

+ Recent posts