iLogtail¶
설치 및 설정¶
DataKit 수집기 활성화¶
cd /usr/local/datakit/conf.d/samples
cp logstreaming.conf.sample logstreaming.conf
sysemctl restart datakit
iLogtail 설정¶
iLogtail 다운로드¶
wget https://ilogtail-community-edition.oss-cn-shanghai.aliyuncs.com/latest/ilogtail-latest.linux-amd64.tar.gz
설정 파일 생성¶
압축을 푼 뒤 ilogtail-1.7.1/user_yaml_config.d 디렉터리에 file_sample.yaml 파일을 생성합니다.
여기서는 /usr/local/df-demo/log-demo/logs/log.log 파일 로그를 수집하도록 설정합니다.
enable: true
inputs:
- Type: file_log
LogPath: /usr/local/df-demo/log-demo/logs # 파일 경로
FilePattern: log.log # 파일 이름
flushers:
- Type: flusher_stdout
OnlyStdout: true
- Type: flusher_http
RemoteURL: "http://localhost:9529/v1/write/logstreaming"
iLogtail 시작¶
로그를 수동으로 입력합니다.
이 시점에 Guance이 iLogtail이 푸시한 로그를 이미 수신했습니다.
pipeline 설정¶
이번에 사용하는 로그는 JAVA 애플리케이션이 생성한 로그 파일 /usr/local/df-demo/log-demo/logs/log.log 입니다. 로그 형식이 다르므로 아래 그림의 content 값도 달라질 수 있으며, pipeline도 그에 맞게 변경해야 합니다.
Java의 logback.xml에서 로그를 출력하는 형식은 아래와 같으며, 출력 내용은 위 그림의 content 값에 해당합니다.
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - [%X{dd.service}][%X{dd.trace_id}][%X{dd.span_id}] - %msg%n
아래에서 Pipeline을 작성하여 전체 로그 내용을 분리하고, 주로 host, host_ip, trace_id 등의 정보를 로그에서 추출합니다.
【로그】->【텍스트 처리(Pipeline)】-> 새 Pipeline 생성. 로그 원본 입력은 “default”로 하고, 파싱 규칙을 입력한 뒤 저장합니다.
json_data = load_json(_)
contents = json_data["contents"]
tags = json_data["tags"]
content = contents["content"]
grok(content, "%{TIMESTAMP_ISO8601:time}%{SPACE}\\[%{NOTSPACE:thread_name}\\]%{SPACE}%{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name}%{SPACE}%{SPACE}-%{SPACE}\\[%{NOTSPACE:method_name},%{NUMBER:line}\\]%{SPACE}-%{SPACE}\\[%{DATA:service_name}\\]\\[%{DATA:trace_id}\\]\\[%{DATA:span_id}\\]%{SPACE}-%{SPACE}%{GREEDYDATA:msg}")
add_key(message, content)
add_key(host_ip, tags["host.ip"])
add_key(host, tags["host.name"])
add_key(filepath, tags["log.file.path"])
JAVA 애플리케이션을 시작하여 로그를 생성하면 iLogtail 로그 수집이 자동으로 트리거됩니다.
Guance로 들어가면 로그가 이미 수집되었고, pipeline도 정상적으로 적용된 것을 확인할 수 있습니다.