Closed jhgoh closed 7 months ago
inputs.exec 플러그인을 이용하는 편이 가장 간편할 것으로 보임. https://github.com/influxdata/telegraf/blob/master/plugins/inputs/exec/README.md
[[inputs.exec]]
섹션에서 commands
항목에 실행할 스크립트를 하나 추가하고, 각 설정들을 조정해 주면 될 것으로 보임.
output의 형식은 위 설정의 data_format = "influx"
로 설정한다면, 아래의 influx line protocol을 따르면 됨.
https://docs.influxdata.com/influxdb/v2/reference/syntax/line-protocol/
즉, 아래 예시와 같은 방식이면 간단할 것으로 보임
myMeasurement,tag1=value1,tag2=value2 fieldKey="fieldValue" 1556813561098000000
스크립트 작성 완료, influx에 잘 입력되고 grafana에서 influxQL로 불러올 수 있음을 확인함.
#!/bin/bash
#/usr/bin/squeue --noheader -o 'squeue,user=%u,status=%T,runtime=%M,partition=%P,host=%R' | sort | uniq -c | awk '{print $2" count="$1"i"}'
/usr/bin/squeue --noheader -o 'squeue,user=%u,status=%T,partition=%P,host=%R' | sort | uniq -c | awk '{print $2" count="$1"i"}'
패널 추가 완료. 현재 구현한 flux문법에서는 서로 다른 group이 서로 섞여 있을 때 sum() 하는 방법이 잘못되어 있는 듯 해서 수정해야 함. 예를 들어, 한 유저가 서로 다른 partition에 job을 submit한 경우 여러 결과 중 하나만 나오거나, 한 유저의 job이 여러 노드에 분산되는 경우 특정 노드의 job수만 나타날 수 있음.
column을 drop하지 않고 가능한 정보를 모두 표시하는 방식으로 일단 바꿔 문제를 회피함. slurm jobs by node는 아직 문제 해결되지 않음.
스크립트 작성 완료, influx에 잘 입력되고 grafana에서 influxDB flux로 불러올 수 있음을 확인함.
#!/bin/bash #/usr/bin/squeue --noheader -o 'squeue,user=%u,status=%T,runtime=%M,partition=%P,host=%R' | sort | uniq -c | awk '{print $2" count="$1"i"}' /usr/bin/squeue --noheader -o 'squeue,user=%u,status=%T,partition=%P,host=%R' | sort | uniq -c | awk '{print $2" count="$1"i"}'
output은 이런식으로 나오게 됨:
jhgoh@lugia:~$ squeue_stat.sh
squeue,user=XXX,status=PENDING,partition=normal,host=(Resources) count=1i
squeue,user=XXX,status=RUNNING,partition=normal,host=entei count=128i
squeue,user=XXX,status=RUNNING,partition=normal,host=ho-oh count=64i
squeue,user=XXX,status=RUNNING,partition=normal,host=raikou count=128i
squeue,user=XXX,status=RUNNING,partition=normal,host=suicune count=128i
squeue,user=YYY,status=PENDING,partition=gpu2,host=(JobHeldAdmin) count=4i
squeue,user=YYY,status=RUNNING,partition=gpu2,host=mewtwo count=1i
현재 세팅에서는 job monitoring을 1분에 한번씩 하도록 했기 때문에 아주 짧은 시간 동안 변화는 모니터링에서 빠짐. 어차피 job monitoring은 오랜 시간동안 점유하는 job들에 대해서 보는 것이 더 중요할 것이기 때문에 수 분 정도 간격에서의 변화는 중요하지 않을 것으로 생각함.
현재 사용중인 flux 구문:
from(bucket: "HEP-KHU")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._name == "squeue_slurm")
|> drop(columns: ["runtime", "partition", "user", "status"])
|> drop(columns: ["_start", "_stop"])
running job만 확인하는 flux:
from(bucket: "HEP-KHU")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._name == "squeue_slurm")
|> filter(fn: (r) => r["status"] == "RUNNING")
|> drop(columns: ["runtime", "status"])
|> drop(columns: ["_start", "_stop"])
버그 수정 완료. 아래와 같이 구현:
from(bucket: "HEP-KHU")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._name == "squeue_slurm")
|> filter(fn: (r) => r["status"] == "RUNNING")
|> group(columns: ["_time", "user", "partition"])
|> sum()
|> group()
|> pivot(rowKey: ["_time"], columnKey: ["user", "partition"], valueColumn: "_value")
|> drop(columns: ["runtime", "status"])
|> drop(columns: ["_start", "_stop"])
slurm job 모니터링을 위한 telegraf 플러그인이 필요함.
경북대 KCMS tier3 사이트에서는 telegraf플러그인을 이용해 condor job모니터링중임. 파이썬을 이용해 제작해도 된다고 함.