경량 로깅 시스템 Loki - 설치 및 구성

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 데이터 소스를 추가합니다.
 

로그 보기

추천

출처blog.csdn.net/weixin_41692221/article/details/131304818