Siga la cuenta pública de WeChat "Así es como debe aprender computación en la nube" y busque "001" para obtener 154 páginas de notas de aprendizaje de Linux compiladas por Krypton Gan.
Loki apunta a EFK/ELK y es muy popular debido a su diseño liviano. En comparación con EFK/ELK, Loki no indexa el registro original, solo indexa las etiquetas del registro. El registro se almacena mediante compresión, generalmente como un archivo. almacenamiento del sistema, por lo que sus costos operativos son menores y órdenes de magnitud más eficientes.
Dado que el almacenamiento de Loki se basa en el sistema de archivos, su búsqueda de registros se basa en el contenido, es decir, el texto en la línea de registro, por lo que su consulta admite LogQL y las búsquedas y consultas se pueden realizar filtrando etiquetas en la ventana de búsqueda.
Loki se divide en dos partes: Loki es la parte del motor de registros y Promtail es el extremo de la recopilación de registros, que luego se muestra a través de Grafana.
1. Instalar grafana
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
Crear servicio Systemd
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
El servicio se inicia automáticamente después del encendido.
systemctl daemon-reload
systemctl enable grafana-server.service && systemctl start grafana-server.service
/usr/local/grafana/conf/defaults.ini es el
puerto de trabajo del archivo de configuración predeterminado, el valor predeterminado es 3000.
Documentación oficial de Loki
https://grafana.com/docs/loki/latest/installation
Loki·Instalación
De la documentación oficial, Loki admite la instalación del código fuente, Docker, Helm, Local y Tanka.
Elijo local, que es un binario compilado. ejecutable
Pasos de instalación del archivo:
URL espejo
https://hub.fastgit.org/grafana
1. Descargue el archivo ejecutable binario
https://hub.fastgit.org/grafana/loki/releases/download/v2.4.1/loki- linux- amd64.zip
descomprimir loki-linux-amd64.zip && mv loki-linux-amd64 /usr/bin/loki
chmod o+x /usr/bin/loki
Cree un directorio de trabajo y descargue el archivo de configuración
mkdir -p /data Configuración de referencia de /loki
El archivo
https://hub.fastgit.org/grafana/loki/blob/main/cmd/loki/loki-local-config.yaml
y el lok.yml final son los siguientes
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
Cree directorios relacionados
mkdir -p /data/loki/{chunks, rules, logs}
para comenzar
nohup loki --config.file=/data/loki/loki.yml > /data/loki/logs/loki.log 2>&1 &
guión de inicio
#!/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
Instale Promtail para recopilar registros.
Promtail es el terminal de recopilación de registros
. Descargue e instale.
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
Archivo de referencia de configuración
Documento del archivo de configuración del sitio web oficial
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
Descripción de parámetros
server部分定义监听端口,positions定义读取的文件偏移量存储位置,clients定义loki接口地址,最后一部分scrape_configs是重点部分
promtail通过scrape_configs部分配置收集日志的相关信息,以测试配置文件为例:
job_name 用来区分日志组
static_configs 收集日志的静态配置
targets 收集日志的节点,这个参数其实是在自动发现的时候使用的
labels 定义一个要收集的日志文件和一组可选的附加标签
job 标签名称,在grafana索引的时候用到的标签名称
__path__ 定义日志收集的文件或路径,支持正则
配置文件修改完成后,就可以启动promtail了,和loki启动方法一样,通过--config.file指定配置文件启动
Promtail, similar a tail, solo escucha nuevos registros y no lee todo el contenido del registro como filebeat. Esta es la diferencia con filebeat. La configuración final es habilitar el descubrimiento de archivos
estático y automático
mkdir -p /data/promtail
vim /datos/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
Comience
a crear archivos relacionados
mkdir -p /data/promtail/log_file/
文件自动发现配置
vim /data/promtail/log_file/mail.json
[
{
"targets": [ "localhost" ],
"labels": {
"__path__": "/var/log/maillog",
"job": "mailserver"
}
}
]
Iniciar automáticamente al arrancar
nohup promtail --config.file=/data/promtail/promtail.yml >/data/promtail/promtail.log 2>&1 &
Iniciar script
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
Comprueba si funciona
[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
Agregue salida de visualización en Grafana.
Inicie sesión en http://Grafana:3000 y agregue la fuente de datos de loki.
Ver registro