[Kibana] timelion 매뉴얼.

Elastic/Kibana 2019.06.19 11:34

요즘 timelion 쓸 일이 있어서 매뉴얼 링크 투척.

https://www.elastic.co/guide/en/kibana/current/timelion.html

 

Timelion | Kibana User Guide [7.1] | Elastic

In 7.x, you’ll no longer see the Timelion application in the Kibana side navigation. However, Timelion visualizations still exist in Visualize. To enable Timelion in the side navigation, set timelion.ui.enabled in your kibana.yml file. In 8.0, the Timelion

www.elastic.co

문서 보면 샘플 부터 자세히 나와 있습니다.

아래는 기본적인 샘플 쿼리 입니다.

.es(

    index=nginx-access-log*, 

    timefield='@timestamp', 

    q='application:app AND host_addr:xxx.xxx.kr', 

    metric='avg:response_time'

)

 

nginx access log 에 기록되는 api 서버의 응답 시간에 대한 평균을 구해서 특정 시간을 넘길 경우 alert 을 발생 시키기 위해 chart 를 그려본 내용입니다.

Trackbacks 0 : Comments 0

[Kibana] visualize 에서 scripted field 사용하기

Elastic/Kibana 2019.04.25 14:14

예전에는 이 기능이 없어서 code 로 되어 있던 field 에 대해서 가독성 확보가 어려웠는데요.

나온지 한 참 되었는데 혹시 필요 하신 분들이 있을 수도 있어서 기록해 봅니다.

 

사실은 제가 기억력이 좋지 않아서 복습 차원에 정리 해 보는 내용입니다.

 

공식 문서)

https://www.elastic.co/guide/en/kibana/current/scripted-fields.html

 

Scripted Fields | Kibana User Guide [7.0] | Elastic

Use of Groovy, JavaScript, and Python scripting is deprecated starting in Elasticsearch 5.0, and support for those scripting languages will be removed in the future.

www.elastic.co

보통 visualize 에서도 "Advanced" 클릭 하시면 JSON Input 영역에 필요한 script 를 넣을 수 있습니다.

Terms aggregation 을 기본 예로 들면,

{
  "aggs": {
    "1": {
      "terms": {
        "field": "user",
        "size": 100000,
        "order": {
          "_count": "desc"
        }
      }
...중략...
}

Kibana 에서 이 정도 작성이 가능 합니다.

여기서 "min_doc_count" 같은 값을 설정 하고 싶을 경우 위에 이야기한 "Advanced" 를 클릭해서 값을 넣으시면 아래와 같이 등록이 됩니다.

 

Advacned JSON Input)

{
  "min_doc_count":3
}

 

최종 Request string)

{
  "aggs": {
    "1": {
      "terms": {
        "field": "user",
        "size": 100000,
        "order": {
          "_count": "desc"
        },
        "min_doc_count":3
      }
...중략...
}

그럼 scripted field 추가를 해보겠습니다.

공식 문서에 자세히 나와 있기 때문에 별도 화면 캡쳐 등의 설명은 하지 않겠습니다.

내용만 발췌 합니다.

Creating a Scripted Field

To create a scripted field:

  1. Go to Management > Kibana > Index Patterns

  2. Select the index pattern you want to add a scripted field to.

  3. Go to the pattern’s Scripted fields tab.

  4. Click Add scripted field.

  5. Enter a name for the scripted field.

  6. Enter the expression that you want to use to compute a value on the fly from your index data.

  7. Click Create field.

이렇게 생성 완료 후 Visualize 에서 Terms aggs 작성 하시면서 Field 쪽에 작성 하신 scripted field 를 넣어 주시면 됩니다.

단, 생성할 때 선택한 index 로 visualize 를 만드셔야지 scripted field 가 노출 됩니다.

 

아래는 제가 사용한 scripted field 정보 입니다.

Name : code_ko
Lang : painless
Script :
if (doc['code'].value == '1') { '카테고리1' } 
else if (doc['code'].value == '2') {'카테고리2'} 
else if (doc['code'].value == '3') {'카테고리3'} 
else if (doc['code'].value == '4') {'카테고리4'} 
else if (doc['code'].value == '5') {'카테고리5'} 
else if (doc['code'].value == '6') {'카테고리6'} 
else if (doc['code'].value == '7') {'카테고리7'} 
else if (doc['code'].value == '8') {'카테고리8'} 
else if (doc['code'].value == '9') {'카테고리9'} 
else if (doc['code'].value == '10') {'카테고리10'} 
else if (doc['code'].value == '11') {'카테고리11'} 
else if (doc['code'].value == '12') {'카테고리12'}

- pseudocode 로 변경해서 기록 했습니다.

tags : elastic, kibana
Trackbacks 0 : Comments 0

[Git] git commit 통계 보기

ITWeb/개발일반 2019.03.19 11:27

파일명 마음에 안들지만 그냥 귀찮으니 그대로 올립니다.


$ tree -f

.

├── ./git-stats-period.sh

├── ./git-stats.sh

└── ./project_clone.sh


$ ./git-stats-period.sh 1 git-stats


git-stats-period.sh) 통계 추출 메인 스크립트

#!/bin/bash


PERIOD=$1

CLONE_DIR=$2


if [ "$#" -ne 2 ]

then

echo "example $ ./git-stats-period.sh PERIOD CLONE-DIR"

echo "example $ ./git-stats-period.sh 7 git-temp"

exit 0

fi


mkdir -p $CLONE_DIR


./project_clone.sh $CLONE_DIR


cd $CLONE_DIR

rm -f ./git-stats-temp.log

rm -f ./git-committers.log


for (( idx=1; idx<=$PERIOD; idx++ ))

do

# 디렉토리 목록을 가져오고, all.log 파일은 삭제

for dir in $(ls -d */)

do

echo ${dir%%/}

echo "rm -f ./${dir%%/}/git-stats-all.log"

echo "../git-stats.sh $idx ${dir%%/}"

rm -f ./${dir%%/}/git-stats-all.log

../git-stats.sh $idx ${dir%%/}

done

done


sort ./git-committers.log | uniq > ./git-uniq-committers.log



git-stats.sh) 통계 추출 실행 스크립트

#!/usr/bin/env bash


pwd

cd $2


#git stash

#git pull

#exit 0


DAYS_AGO=$1

DATE=`date -v -"$DAYS_AGO"d +%F`

PWD=`pwd`


rm -f ./git-stats-$DATE.log

echo "Date : $DATE" > "git-stats-$DATE.log"

echo "Date : $DATE" >> "git-stats-all.log"

echo "Date : $DATE" >> "../git-stats-temp.log"

# This script must exist under git repository.


echo "[Commit Statistics]" >> "git-stats-$DATE.log"

echo "[Commit Statistics]" >> "git-stats-all.log"

echo "[Commit Statistics]" >> "../git-stats-temp.log"

# total commit stats

USER_COUNT=`git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --format='%aN %ce' | sort -u | wc -l`

echo "Total Commit Users : $USER_COUNT" >> "git-stats-$DATE.log"

echo "Total Commit Users : $USER_COUNT" >> "git-stats-all.log"

echo "Total Commit Users : $USER_COUNT" >> "../git-stats-temp.log"

git log --shortstat --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed: ", files, "lines inserted: ", inserted, "lines deleted: ", deleted }' >> "git-stats-$DATE.log"

git log --shortstat --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed: ", files, "lines inserted: ", inserted, "lines deleted: ", deleted }' >> "git-stats-all.log"

git log --shortstat --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all | grep -E "fil(e|es) changed" | awk '{files+=$1; inserted+=$4; deleted+=$6} END {print "files changed: ", files, "lines inserted: ", inserted, "lines deleted: ", deleted }' >> "../git-stats-temp.log"

echo "" >> "git-stats-$DATE.log"

echo "" >> "git-stats-all.log"

echo "" >> "../git-stats-temp.log"


echo "[Committers]" >> "git-stats-$DATE.log"

echo "[Committers]" >> "git-stats-all.log"

echo "[Committers]" >> "../git-stats-temp.log"

# commit user list

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --format='%aN %ce' | sort -u >> "git-stats-$DATE.log"

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --format='%aN %ce' | sort -u >> "git-stats-all.log"

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --format='%aN %ce' | sort -u >> "../git-committers.log"

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --format='%aN %ce' | sort -u >> "../git-stats-temp.log"

echo "" >> "git-stats-$DATE.log"

echo "" >> "git-stats-all.log"

echo "" >> "../git-stats-temp.log"


echo "[Commit Logs]" >> "git-stats-$DATE.log"

echo "[Commit Logs]" >> "git-stats-all.log"

echo "[Commit Logs]" >> "../git-stats-temp.log"

# each user commit stats

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --pretty=format:'"%an", "%aD", "%s",' --shortstat --no-merges >> "git-stats-$DATE.log"

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --pretty=format:'"%an", "%aD", "%s",' --shortstat --no-merges >> "git-stats-all.log"

git log --before="$DATE 23:59:59" --after="$DATE 00:00:00" --all --pretty=format:'"%an", "%aD", "%s",' --shortstat --no-merges >> "../git-stats-temp.log"



project_clone.sh) git repo clone 스크립트

#!/bin/bash

CLONE_DIR=$1

echo "현재 받아 놓은 Repository는 모두 삭제 됩니다. 진행 하시겠습니까? (y/n)"
read answer

cd $CLONE_DIR

if [ "$answer" == "y" ]; then
  rm -rf *
else
  exit 0
fi

arr_repos=("GIT-REPOSITORY[http://...]")

for git_repo in "${arr_repos[@]}"; do
  if [ "$answer" == "y" ]; then
    git clone $git_repo
    echo ""
  fi
done



tags : commit, GIT, stats
Trackbacks 0 : Comments 0

[Shell] 메모리 많이 사용하는 프로세스 보기

ITWeb/개발일반 2019.03.19 10:52

# 상위 Top 10 MEM 사용 프로세스

$ ps aux --sort=-vsz,-rss | head -10


# 특정 프로세스 MEM Usage 구하기

$ ps --no-headers -o “rss,cmd” -C php-fpm | awk ‘{ sum+=$1 } END { printf (“%d%s\n”, sum/NR/1024,“M”) }’


막상 쓸라고 하면 기억 나지 않아 올려 봅니다.

tags : MEM, memory, PS
Trackbacks 0 : Comments 0

[BASH] directory list

ITWeb/개발일반 2019.03.11 19:16


명령어만 사용하던걸 스크립트에서 사용 할때)


#!/bin/bash


for i in $(ls -d */)

do

echo ${i%%/}

done


특정 디렉토리 아래에 있는 디렉토리 목록 출력. (이런 기본도 이제는 기록을 해둬야 ㅡ.ㅡ;)


참고로 for in 에서 간혹 실수 하는 것)


for (( idx=1; idx<=$PERIOD; idx++ ))

do

    echo "$idx 번 입니다."

done


$PERIOD 를 변수로 받아서 처리 할 경우 아래의 for .. in  은 동작을 안합니다.


for idx in {1..$PERIOD}

do

    echo "$idx 번 입니다."

done


tags : bash, for, ls
Trackbacks 0 : Comments 0