사용자 정의 규칙 파일 및 라이브러리¶
- 버전: 1.0.7-7-g251eead
- 릴리스 날짜: 2023-04-06 11:17:57
- 지원 운영 체제: windows/amd64,windows/386,linux/arm,linux/arm64,linux/386,linux/amd64
scheck 규칙 소개¶
lua 규칙 소개:
규칙 스크립트는 lua 파일과 manifest 파일 두 개로 구성됩니다. 두 파일은 반드시 함께 존재해야 하며, 파일 접두사가 동일해야 합니다!
-
<rule-name>.lua: 규칙의 판단 스크립트로, lua 문법을 기반으로 구현되었지만 표준 lua 라이브러리를 참조할 수 없으며, 내장된 lua 라이브러리와 내장 함수만 사용할 수 있습니다. -
<rule-name>.manifest: 규칙 매니페스트 파일입니다. 해당 lua 스크립트가 문제를 감지하면(result == true), manifest 파일에 해당하는 동작 정의가 있습니다.
매니페스트 파일 필드 설명¶
| manifest 필드 | 필드 설명 | 설정 설명 |
|---|---|---|
| id | 이름 | id 규칙에 따라 스크립트의 기능을 추가하여 명명 |
| category | system | 여러 유형 사용 가능: system, os, net, file, db, docker... |
| level | 알림 수준 | 선택 가능한 유형: debug, info, warn, error |
| title | 규칙 제목 | 일반적으로 규칙의 기능에 따라 명명 |
| desc | 설명 | 텍스트로 규칙 실행 결과를 표시하고 구체적으로 설명 |
| cron | 사용자 정의 실행 간격 | 참고: cron 예제 작성 |
| disabled | 전환 | 선택 필드: true 또는 false |
| os_arch | 지원 운영 체제 | 배열 유형, 선택: "windows" "linux" |
scheck 내장 규칙은 설치 디렉토리 rules.d에 있습니다.
사용자 정의 규칙 및 lua 라이브러리¶
이 예제는 호스트명을 정기적으로 확인하는 규칙을 예시로 합니다.
- lua 파일 작성
사용자 디렉토리
custom.rules.d에 10001-hostname.lua 파일을 생성합니다. 코드는 다음과 같습니다:
local function check()
local cache_key = "hostname"
local old = get_cache(cache_key) --get_cache(key)는 lua 스크립트 캐시를 위한 go 내장 함수로, set_cache(cache_key, current)와 함께 사용됩니다
if old == nil then
local current = hostname() -- go 내장 함수, 호스트명 가져오기
set_cache(cache_key, current)
return
end
local current = hostname()
if old ~= current then
trigger({Content=current}) -- go 내장 함수, 메시지를 datakit 또는 로컬 로그로 전송
set_cache(cache_key, current)
end
end
check()
참고: scheck는 사용자 정의 규칙 이름도 이 규칙을 따르기를 권장합니다.
- manifest 파일 작성
사용자 디렉토리
custom.rules.d에10001-hostname.manifest파일을 생성합니다. 내용은 다음과 같습니다:
id="10001-hostname"
category="system"
level="info"
title="호스트명 변경됨"
desc="호스트명이 다음과 같이 변경됨: {{.Content}}"
cron="0 */1 * * *"
# 전환
disabled=false
os_arch=["Linux"]
현재 규칙 매니페스트 파일은 1분마다 실행되도록 설정되어 있습니다.
- 서버 재시작
- 메시지 전송
서버를 재시작한 후 1분마다 스크립트가 실행되며, 1분 후에 hostname을 수정할 수 있습니다.
정적 호스트명은 /etc/hostname 파일에 저장되며, 명령을 통해 수정할 수 있습니다.
- 관찰
Guance 콘솔에 로그인 -> 탐색 모음 -> 보안 점검: 설치 점검 정보를 확인하면 호스트명이 변경되었다는 메시지가 표시됩니다.
규칙 라이브러리¶
lua 라이브러리 파일 및 사용자 정의 라이브러리:
scheck에 포함된 lua 참조 라이브러리 파일은 설치 디렉토리 rules.d/libs에 있으며, 함수 목록 및 인터페이스 문서는 온라인에서 확인할 수 있습니다.
lib 라이브러리 파일은 manifest 매니페스트 파일이 필요하지 않으며, lua에서 참조할 때 한 번 선언해야 합니다. 예를 들어 libs의 directorymonitor를 참조하려면 한 번 선언해야 합니다:
local directorymonitor = require("directorymonitor")
local function check()
directorymonitor.add("/usr/bin")
end
check()
참고: 사용자는 scheck에 포함된 lib 라이브러리와 lua 규칙 파일을 수정할 수 없습니다. 설치 업데이트 및 서비스 재시작 시마다 규칙 파일이 다시 덮어쓰기됩니다.
사용자 정의 규칙 및 라이브러리 파일은 custom.rules.d 디렉토리에 배치할 수 있으며, 사용자 정의 lua 참조 라이브러리 파일이 있는 경우 custom.rules.d/libs 디렉토리에 배치할 수 있습니다.
다른 경로를 지정하려면 구성 파일 scheck.conf만 수정하면 됩니다:
[system]
# ##(필수) 시스템 감지 스크립트 저장 디렉토리
rule_dir = "/usr/local/scheck/rules.d"
# ##고객 정의 디렉토리
custom_dir = "/usr/local/scheck/custom.rules.d"
# 선택 사항 사용자 정의 lua 라이브러리, rule_dir 사용 불가, 시스템 기본값은 사용자 디렉토리의 libs
custom_rule_lib_dir = "/usr/local/scheck/custom.rules.d/libs"
그런 다음 서비스를 재시작하면 됩니다.
부록¶
lua 규칙 이름 규칙¶
scheck에 포함된 lua는 유형별로 명명되며, 이름 앞의 ID는 특정 규칙 유형에 속함을 나타냅니다.
사용자 규칙 이름은 숫자로 시작해야 하며 10000보다 작을 수 없습니다. 예: 10001-xxx.lua
scheck 내장 규칙 이름 규칙:
| ID 범위 | 규칙 유형 |
|---|---|
| 0000 | 시스템 캐시 |
| 0001~0199 | system |
| 0200~0299 | 네트워크 |
| 0300~0310 | 컨테이너 관련 |
| 0500~0510 | 데이터베이스 |
| 10000 이상 | 사용자 정의 |
사용자 정의 lua가 이름 규칙을 따르지 않으면 규칙 로드에 실패합니다.
manifest 파일 cron 필드 설정¶
Scheck는 두 가지 실행 방식을 지원합니다: 간격 실행, 장기 실행 유형. 현재 고정 시간 실행은 지원되지 않습니다!
간격 실행 cron¶
장기 실행 규칙¶
장기 실행 규칙은 계속 실행되며, 트리거 발생 시 1초 이내에 메시지를 보고합니다. 예: 파일 변경
