Loki + Promtail 解决日志多行与跨行问题

当项目缺少日志格式化时,Promtail无法正确处理有空白字符开头的多行或跨行日志,导致日志丢失。通过查阅官方文档并实践,可以在Promtail客户端配置pipelines管道来解决此问题。具体做法是设置regex和multiline阶段,匹配日志行首标志,确保日志完整发送到Loki。
  1. 描述

    因项目未进行日志格式化,在有空白字符开头的日志记录产生时,promtail无法将跨行及多行日志发送给loki,导致日志丢行。

  2. 解决

    经过查询官方文档https://grafana.com/docs/loki/v2.2.0/clients/promtail获悉Promtail可通过配置pipelines管道进行处理日志(类似于ELK格式化日志),但实现很轻巧。
    经过实践,参考https://grafana.com/docs/loki/v2.2.0/clients/promtail/pipelines/,在客户端promtail中进行以下配置可解决日志多行、跨行问题。

    书写过程请注意引号及缩进

    scrape_configs:
      - job_name:  'xx'
        static_configs:
        - targets
<think> 我们被要求提供在Ubuntu系统上非Docker版本的LokiPromtail的安装教程。根据引用[4],我们得知有二进制文件可以直接下载使用。因此,我们将通过以下步骤进行安装: 1. 下载LokiPromtail的二进制文件。 2. 准备配置文件。 3. 启动LokiPromtail服务。 注意:这些步骤需要在Ubuntu系统上执行。 ### 步骤1: 下载二进制文件 首先,访问Loki的GitHub发布页面:https://github.com/grafana/loki/releases 找到适合的版本(例如2.9.0),然后下载LokiPromtail的Linux二进制文件。我们将使用命令行下载。 打开终端,执行以下命令: ```bash # 创建安装目录 mkdir -p ~/loki cd ~/loki # 下载Loki二进制文件(请根据实际情况替换版本号和架构,这里以2.9.0和amd64为例) wget https://github.com/grafana/loki/releases/download/v2.9.0/loki-linux-amd64.zip # 下载Promtail二进制文件 wget https://github.com/grafana/loki/releases/download/v2.9.0/promtail-linux-amd64.zip # 解压 unzip loki-linux-amd64.zip unzip promtail-linux-amd64.zip # 重命名以简化使用(可选) mv loki-linux-amd64 loki mv promtail-linux-amd64 promtail ``` ### 步骤2: 准备配置文件 我们需要为LokiPromtail分别创建配置文件。 #### Loki配置文件 创建一个名为`loki-config.yaml`的文件,内容可以参考Loki的默认配置。以下是一个简单示例: ```yaml auth_enabled: false server: http_listen_port: 3100 ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 final_sleep: 0s chunk_idle_period: 5m chunk_retain_period: 30s max_transfer_retries: 0 schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h storage_config: boltdb_shipper: active_index_directory: /tmp/loki/boltdb-shipper-active cache_location: /tmp/loki/boltdb-shipper-cache cache_ttl: 24h shared_store: filesystem filesystem: directory: /tmp/loki/chunks compactor: working_directory: /tmp/loki/boltdb-shipper-compactor shared_store: filesystem limits_config: enforce_metric_name: false reject_old_samples: true reject_old_samples_max_age: 168h chunk_store_config: max_look_back_period: 0s table_manager: retention_deletes_enabled: false retention_period: 0s ``` #### Promtail配置文件 创建一个名为`promtail-config.yaml`的文件,用于指定如何收集日志并发送到Loki。以下是一个示例配置,它会收集`/var/log`目录下的日志: ```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 ``` ### 步骤3: 启动服务 #### 启动Loki 在终端中运行: ```bash # 进入之前创建的目录 cd ~/loki # 启动Loki,指定配置文件 ./loki -config.file=loki-config.yaml ``` #### 启动Promtail 打开另一个终端窗口(因为Loki需要在后台运行),然后运行: ```bash cd ~/loki ./promtail -config.file=promtail-config.yaml ``` ### 步骤4: 验证 我们可以通过查看Loki的metrics端点来验证服务是否运行: ```bash curl http://localhost:3100/metrics ``` 此外,可以查看Promtail的metrics端点: ```bash curl http://localhost:9080/metrics ``` ### 步骤5: 使用Grafana查看日志 如果还没有安装Grafana,可以按照以下步骤安装: ```bash # 添加Grafana仓库 sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana ``` 启动Grafana服务: ```bash sudo systemctl start grafana-server sudo systemctl enable grafana-server ``` 然后,通过浏览器访问`http://localhost:3000`(默认用户和密码都是admin),并添加Loki数据源,URL为`http://localhost:3100`。 ### 注意事项 1. 上述配置中,LokiPromtail的数据存储都使用了`/tmp`目录,这意味着重启后数据会丢失。在生产环境中,需要配置持久化存储。 2. 配置文件中的路径需要根据实际情况调整。 3. 如果需要后台运行,可以使用`nohup`或创建systemd服务。 ### 创建systemd服务(可选) 为了更方便地管理服务,我们可以为LokiPromtail创建systemd服务。 #### Loki服务 创建文件`/etc/systemd/system/loki.service`: ```ini [Unit] Description=Loki service After=network.target [Service] Type=simple User=root ExecStart=/home/your_username/loki/loki -config.file /home/your_username/loki/loki-config.yaml Restart=on-failure [Install] WantedBy=multi-user.target ``` #### Promtail服务 创建文件`/etc/systemd/system/promtail.service`: ```ini [Unit] Description=Promtail service After=network.target [Service] Type=simple User=root ExecStart=/home/your_username/loki/promtail -config.file /home/your_username/loki/promtail-config.yaml Restart=on-failure [Install] WantedBy=multi-user.target ``` 然后重新加载systemd并启动服务: ```bash sudo systemctl daemon-reload sudo systemctl start loki sudo systemctl start promtail sudo systemctl enable loki sudo systemctl enable promtail ``` 请确保替换`/home/your_username`为实际路径。 以上就是在Ubuntu系统上非Docker版本的LokiPromtail安装教程。 §§相关问题§§ 1. 如何配置Loki的持久化存储? 2. Promtail如何收集多个目录的日志? 3. 如何配置Loki的权限验证? </think> ### Ubuntu系统非Docker版LokiPromtail安装教程 以下是手动安装LokiPromtail的详细步骤(基于二进制文件部署): #### 1. 环境准备 ```bash # 更新系统 sudo apt update && sudo apt upgrade -y # 创建专用用户和目录 sudo useradd --system --shell /bin/false loki sudo mkdir -p /opt/loki/{bin,config,data} sudo chown -R loki:loki /opt/loki ``` #### 2. 下载二进制文件 ```bash # 下载最新版Loki (替换版本号) LOKI_VERSION="2.9.0" wget https://github.com/grafana/loki/releases/download/v${LOKI_VERSION}/loki-linux-amd64.zip # 下载Promtail wget https://github.com/grafana/loki/releases/download/v${LOKI_VERSION}/promtail-linux-amd64.zip # 解压文件 unzip loki-linux-amd64.zip unzip promtail-linux-amd64.zip # 移动到安装目录 sudo mv loki-linux-amd64 /opt/loki/bin/loki sudo mv promtail-linux-amd64 /opt/loki/bin/promtail sudo chmod +x /opt/loki/bin/* ``` #### 3. 配置Loki 创建配置文件 `/opt/loki/config/loki-config.yaml`: ```yaml auth_enabled: false server: http_listen_port: 3100 common: path_prefix: /opt/loki/data storage: filesystem: chunks_directory: /opt/loki/data/chunks rules_directory: /opt/loki/data/rules replication_factor: 1 ring: instance_addr: 127.0.0.1 kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 24h ruler: alertmanager_url: http://localhost:9093 ``` #### 4. 配置Promtail 创建配置文件 `/opt/loki/config/promtail-config.yaml`: ```yaml server: http_listen_port: 9080 grpc_listen_port: 0 positions: filename: /opt/loki/data/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 ``` #### 5. 创建Systemd服务 创建Loki服务文件 `/etc/systemd/system/loki.service`: ```ini [Unit] Description=Loki Log Aggregation System After=network.target [Service] User=loki Group=loki Type=simple ExecStart=/opt/loki/bin/loki -config.file /opt/loki/config/loki-config.yaml Restart=on-failure [Install] WantedBy=multi-user.target ``` 创建Promtail服务文件 `/etc/systemd/system/promtail.service`: ```ini [Unit] Description=Promtail Log Collector After=network.target [Service] User=loki Group=loki Type=simple ExecStart=/opt/loki/bin/promtail -config.file /opt/loki/config/promtail-config.yaml Restart=on-failure [Install] WantedBy=multi-user.target ``` #### 6. 启动服务 ```bash # 重载systemd sudo systemctl daemon-reload # 启动服务 sudo systemctl start loki promtail # 设置开机自启 sudo systemctl enable loki promtail # 检查状态 sudo systemctl status loki promtail ``` #### 7. 验证安装 ```bash # 检查端口监听 ss -tulnp | grep -E '3100|9080' # 测试日志摄入 logger "Hello Loki Test Message" curl -G -s "http://localhost:3100/loki/api/v1/query" --data-urlencode 'query={job="varlogs"}' | jq ``` ### 后续配置 1. **Grafana连接配置**: - 添加Loki数据源,URL填写`http://<服务器IP>:3100` - 在Explore界面使用LogQL查询日志 2. **日志路径扩展**: 修改Promtail配置中的`__path__`,添加需要收集的日志路径: ```yaml __path__: /var/log/*log,/opt/myapp/logs/*.log ``` 3. **安全加固建议**: - 启用Loki身份验证(配置`auth_enabled: true`) - 限制Promtail的HTTP监听地址 - 配置防火墙规则只允许Grafana访问3100端口 > 注意:生产环境建议配置持久化存储,可将`/opt/loki/data`挂载到独立磁盘[^4]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值