7. 태스크 결과 취합


결과 취합 기능은, 태스크의 출력 결과 중 일부를 필드값으로 추출 및 취합하여 한번에 확인해 볼 수 있는 기능입니다.

다음 태스크는 운영체제의 점검 결과를 취합하여 보여주기 위한 예시입니다.

태스크 정의서 : oscheck.tdf

---
id: oscheck
owner: gildong
cut-off-period: 5m
script-account: root
target:
- node-set: HOSTNAME:"^DB-", OS-TYPE:"^Linux$"
...

태스크 스크립트 : oscheck.sh

#!/bin/bash

echo "CHECKING CPU USAGE..."
cpu_idle=$(top -bn2 | grep "Cpu(s)" | tail -n 1 | awk '{print $8}')
cpu_percent=$(echo "100 - $cpu_idle" | bc)

echo "CHECKING MEMORY USAGE..."
mem_info=$(free -m | awk '/^Mem:/ {print $2, $3}')
total_memory=$(echo "$mem_info" | awk '{print $1}')
used_memory=$(echo "$mem_info" | awk '{print $2}')
memory_percent=$((used_memory * 100 / total_memory))

echo "CHECKING DISK USAGE..."
disk_percent=$(df / | tail -n 1 | grep -oP '\d+(?=%)' || echo "0")

echo "CHECKING UPTIME..."
uptime_days=$(uptime | awk -F, '{print $1}' | grep -oP '\d+(?= day)' || echo "0")

echo "@OPM_ATTR.GATHER_START@"
echo "cpu_percent:$cpu_percent"
echo "memory_percent:$memory_percent"
echo "disk_percent:$disk_percent"
echo "uptime_days:$uptime_days"
echo "@OPM_ATTR.GATHER_END@"

exit 0

스크립트의 세부적인 명령어는 본 가이드의 주제가 아니므로, 결과만 확인해보도록 하겠습니다. 실행된 스크립트의 표준 출력 결과는 다음과 같습니다.

OUTPUT

CHECKING CPU USAGE...
CHECKING MEMORY USAGE...
CHECKING DISK USAGE...
CHECKING UPTIME...
@OPM_ATTR.GATHER_START@
cpu_percent:2.0
memory_percent:48
disk_percent:76
uptime_days:96
@OPM_ATTR.GATHER_END@

위 출력 결과에서 취합과 관련된 부분은 @OPM_ATTR.GATHER_START@ 로 시작되는 라인부터 @OPM_ATTR.GATHER_END@ 까지의 라인입니다. 두가지 태그 사이의 라인들은 각각 하나의 필드를 나타내며, 필드키:필드값 의 형식으로 작성되어야 합니다.

태스크의 실행 종료 후, 전체 노드의 취합 결과를 하나의 JSON 문서로 볼 수 있습니다.

COMMAND

$ opmate execution viewgather -id 903

OUTPUT

[
    {
        "nodeSessionId": "01d5020e-dc5f-4744-ad9c-22f23727db76",
        "hostname": "DB-DEV-LINUX",
        "remoteAddr": "11.22.33.43",
        "result": "S",
        "gather": {
            "cpu_percent": "2.0",
            "memory_percent": "48",
            "disk_percent": "76",
            "uptime_days": "96"
        }
    },
    {
        "nodeSessionId": "ea3117fe-2c16-4533-afb7-8b0fe7685251",
        "hostname": "DB-PROD-LINUX",
        "remoteAddr": "11.22.33.45",
        "result": "S",
        "gather": {
            "cpu_percent": "28.9",
            "memory_percent": "10",
            "disk_percent": "21",
            "uptime_days": "125"
        }
    }
]

만약, 태스크에 통지(notification)를 설정하여 실행 결과를 E-Mail 등으로 받게 된다면, 아래 구조와 같은 HTML 테이블이나 xls 파일로 내용을 확인할 수도 있습니다.

통지 설정

---
id: oscheck
(중략)
notification:
- event: terminate
  method: mail
  receiver: gildong@example.com
...

통지 결과

+---------------+---------------+--------------+---------+-------------+----------------+--------------+-------------+
| nodeSessionId | hostname      | remoteAddr   | result  | cpu_percent | memory_percent | disk_percent | uptime_days |
+---------------+---------------+--------------+---------+-------------+----------------+--------------+-------------+
| 01d5020e-...  | DB-DEV-LINUX  | 11.22.33.43  | success | 2.0         | 48             | 76           | 96          |
| ea3117fe-...  | DB-PROD-LINUX | 11.22.33.45  | success | 28.9        | 10             | 21           | 125         |
+---------------+---------------+--------------+---------+-------------+----------------+--------------+-------------+