WeChat 공개 계정 "클라우드 컴퓨팅을 배우는 방법은 다음과 같습니다"를 팔로우하고 "001"을 검색하면 Krypton Gan이 편집한 154페이지의 Linux 학습 노트를 얻을 수 있습니다.
Loki는 EFK/ELK에 대한 벤치마크이며 경량 설계로 인해 매우 인기가 높습니다. EFK/ELK에 비해 Loki는 원본 로그를 색인화하지 않고 로그의 태그만 색인화합니다. 로그는 압축을 통해 저장되며 일반적으로 파일로 저장됩니다. .시스템 스토리지이므로 운영 비용이 더 낮고 훨씬 더 효율적입니다.
로키의 스토리지는 파일 시스템을 기반으로 하기 때문에 로그 검색은 내용, 즉 로그 줄에 있는 텍스트를 기반으로 하므로 쿼리는 LogQL을 지원하며, 검색창에서 태그를 필터링하여 검색 및 쿼리를 수행할 수 있다.
Loki는 두 부분으로 나뉘는데, Loki는 로그 엔진 부분이고, Promtail은 로그 수집 끝이며, 이는 Grafana를 통해 표시됩니다.
1. 그라파나 설치
wget https://dl.grafana.com/oss/release/grafana-8.2.5.linux-amd64.tar.gz
tar -zxvf grafana-8.2.5.linux-amd64.tar.gz
mv grafana-8.2.5 /usr/local/grafana
시스템 서비스 생성
cat>/usr/lib/systemd/system/grafana-server.service<<EOF
[Unit]
Description=Grafana Server
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/grafana
ExecStart=/usr/local/grafana/bin/grafana-server
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
전원을 켜면 서비스가 자동으로 시작됩니다.
systemctl daemon-reload
systemctl enable grafana-server.service && systemctl start grafana-server.service
/usr/local/grafana/conf/defaults.ini는 기본 구성 파일
작업 포트이며 기본값은 3000입니다.
Loki 공식 문서
https://grafana.com/docs/loki/latest/installation
Loki·Installation
공식 문서에 따르면 Loki는 소스코드 설치와 Docker, Helm, Local, Tanka를 지원하는데
저는 컴파일된 바이너리인 local을 선택했습니다. 파일
설치 단계:
미러 URL
https://hub.fastgit.org/grafana
1. 바이너리 실행 파일
https://hub.fastgit.org/grafana/loki/releases/download/v2.4.1/loki-를 다운로드합니다. linux- amd64.zip
unzip loki-linux-amd64.zip && mv loki-linux-amd64 /usr/bin/loki
chmod o+x /usr/bin/loki
작업 디렉토리를 생성하고 구성 파일을 다운로드합니다
mkdir -p /data /loki
참조 구성 파일
https://hub.fastgit.org/grafana/loki/blob/main/cmd/loki/loki-local-config.yaml
및 최종 lok.yml은 다음과 같습니다.
vim /data/loki/lok.yml
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /data/loki
storage:
filesystem:
chunks_directory: /data/loki/chunks
rules_directory: /data/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
##报警地址
ruler:
alertmanager_url: http://localhost:9093
#启用Redis缓存配置
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /data/loki
storage:
filesystem:
chunks_directory: /data/loki/chunks
rules_directory: /data/loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
frontend:
compress_responses: true
query_range:
split_queries_by_interval: 24h
results_cache:
cache:
redis:
endpoint: 192.168.1.6:6379
expiration: 10s
db: 1
cache_results: true
chunk_store_config:
chunk_cache_config:
redis:
endpoint: 192.168.1.6:6379
expiration: 10s
db: 1
write_dedupe_cache_config:
redis:
endpoint: 192.168.1.6:6379
expiration: 1h
db: 2
ruler:
alertmanager_url: http://localhost:9093
시작하려면 관련 디렉터리
mkdir -p /data/loki/{chunks, rule,logs}를 생성하세요.
nohup loki --config.file=/data/loki/loki.yml > /data/loki/logs/loki.log 2>&1 &
시작 스크립트
#!/bin/bash
CONFILE='/data/loki/loki.yml'
PIDFILE='/data/loki/loki.pid'
LOGFILE='/data/loki/loki.log'
OPTS='/usr/bin/loki --config.file='
PID=`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`
if [ ! ${PID} ]; then
nohup ${OPTS}${CONFILE} >${LOGFILE} 2>&1 & echo $! >${PIDFILE} &
sleep 3
echo "loki PID:`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`"
PID=`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`
if [ ! ${PID} ] ; then echo "loki config error, tail -f ${LOGFILE}!"
fi
else
echo "loki is running,PID:`cat ${PIDFILE}`"
fi
로그를 수집하려면 promtail을 설치하세요.
Promtail은 로그 수집 터미널입니다
. 다운로드하여 설치하세요.
wget https://hub.fastgit.org/grafana/loki/releases/download/v2.4.1/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip && mv promtail-linux-amd64 /usr/bin/promtail && chmod o+x /usr/bin/promtail
구성 참조 파일
공식 웹사이트 구성 파일 문서
https://grafana.com/docs/loki/latest/clients/promtail/configuration/
https://hub.fastgit.org/grafana/loki/blob/main/clients/cmd/promtail/promtail-local-config.yaml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
매개변수 설명
server部分定义监听端口,positions定义读取的文件偏移量存储位置,clients定义loki接口地址,最后一部分scrape_configs是重点部分
promtail通过scrape_configs部分配置收集日志的相关信息,以测试配置文件为例:
job_name 用来区分日志组
static_configs 收集日志的静态配置
targets 收集日志的节点,这个参数其实是在自动发现的时候使用的
labels 定义一个要收集的日志文件和一组可选的附加标签
job 标签名称,在grafana索引的时候用到的标签名称
__path__ 定义日志收集的文件或路径,支持正则
配置文件修改完成后,就可以启动promtail了,和loki启动方法一样,通过--config.file指定配置文件启动
tail과 마찬가지로 promtail은 새 로그만 수신하고 filebeat처럼 로그의 모든 내용을 읽지 않습니다. 이는 filebeat와 다릅니다. 최종 구성은
정적 및 자동 파일 검색을 활성화하는 것입니다.
mkdir -p /data/promtail
vim /데이터/promtail/promtail.yml
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://192.168.1.6:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log
file_sd_configs:
- files:
- /data/promtail/log_file/*.json
refresh_interval: 1m
관련 파일 만들기 시작
mkdir -p /data/promtail/log_file/
文件自动发现配置
vim /data/promtail/log_file/mail.json
[
{
"targets": [ "localhost" ],
"labels": {
"__path__": "/var/log/maillog",
"job": "mailserver"
}
}
]
부팅 시 자동으로 시작
nohup promtail --config.file=/data/promtail/promtail.yml >/data/promtail/promtail.log 2>&1 &
시작 스크립트
vim /data/promtail/start.sh
#!/bin/bash
CONFILE='/data/promtail/promtail.yml'
PIDFILE='/data/promtail/promtail.pid'
LOGFILE='/data/promtail/promtail.log'
OPTS='/usr/bin/promtail --config.file='
PID=`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`
if [ ! ${PID} ]; then
nohup ${OPTS}${CONFILE} >${LOGFILE} 2>&1 & echo $! >${PIDFILE} &
sleep 3
echo "promtail PID:`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`"
PID=`ps -ef | grep ${CONFILE} | grep 'config.file' | awk '{print $2}'`
if [ ! ${PID} ] ; then echo "promtail config error, tail -f ${LOGFILE}!"
fi
else
echo "promtail is running,PID:`cat ${PIDFILE}`"
fi
chmod o+x /data/promtail/start.sh
작동하는지 확인하세요.
[root@openrestry promtail]# netstat -ntpl | grep loki
tcp6 0 0 :::9096 :::* LISTEN 1721/loki
tcp6 0 0 :::3100 :::* LISTEN 1721/loki
[root@openrestry promtail]# netstat -ntpl | grep promtail
tcp6 0 0 :::40210 :::* LISTEN 1833/promtail
tcp6 0 0 :::9080 :::* LISTEN 1833/promtail
Grafana에 디스플레이 출력 추가
http://Grafana:3000에 로그인하고 loki 데이터 소스를 추가합니다.
로그 보기