콘텐츠로 이동

사용자 정의 규칙 파일 및 라이브러리


  • 버전: 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 라이브러리

이 예제는 호스트명을 정기적으로 확인하는 규칙을 예시로 합니다.

  1. 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는 사용자 정의 규칙 이름도 이 규칙을 따르기를 권장합니다.

  1. manifest 파일 작성 사용자 디렉토리 custom.rules.d10001-hostname.manifest 파일을 생성합니다. 내용은 다음과 같습니다:
id="10001-hostname"
category="system"
level="info"
title="호스트명 변경됨"
desc="호스트명이 다음과 같이 변경됨: {{.Content}}"
cron="0 */1 * * *"
# 전환
disabled=false
os_arch=["Linux"]

현재 규칙 매니페스트 파일은 1분마다 실행되도록 설정되어 있습니다.

  1. 서버 재시작
systemctl restart scheck.service
  1. 메시지 전송

서버를 재시작한 후 1분마다 스크립트가 실행되며, 1분 후에 hostname을 수정할 수 있습니다.

정적 호스트명은 /etc/hostname 파일에 저장되며, 명령을 통해 수정할 수 있습니다.

   hostnamectl set-hostname  myclient1
  1. 관찰

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

cron="* */1 * * *"  # 1분마다 실행
cron="* * */1 * *"  # 1시간마다 실행
cron="* * * */1 *"  # 1일마다 실행

장기 실행 규칙

cron="disable" 또는 cron=""

장기 실행 규칙은 계속 실행되며, 트리거 발생 시 1초 이내에 메시지를 보고합니다. 예: 파일 변경

문서 평가

이 페이지가 도움이 되었나요?