Java—Loki日志收集

本文详细介绍了如何安装和配置Loki日志聚合系统,包括使用脚本安装、Promtail推送日志以及与Grafana集成。还提供了Java和Promtail方式推送日志的配置示例。
摘要由CSDN通过智能技术生成

简介

官方简介:Loki 是一个受 Prometheus 启发的水平可扩展、高度可用的多租户日志聚合系统。它的设计非常具有成本效益且易于操作。它不索引日志的内容,而是为每个日志流编制一组标签。。

背景

日志统一管理问题。

教程

前置准备

# 1、拉取安装脚本
git clone https://gitee.com/clancy-lv/plg-install-script.git
# 2、进入脚本文件所在目录
cd plg-install-script
# 3、给install脚本添加可执行权限
chmod +x install.sh

一、安装Loki

1、脚本安装Loki
# 1、取消install.sh脚本末尾中loki_install "$1" "$2"注释
# 2、执行命令(第一个参数:loki压缩包全名称;第二个参数:压缩包解压后绝对路径)
sh install.sh 'loki-linux-amd64.zip' '/usr/local/loki/data'
2、开放3100端口供Promtail推送日志
3、Loki启动相关命令
Loki服务启动命令:
	systemctl start loki.service
Loki服务停止命令:
	systemctl stop loki.service
Loki服务状态命令:
	systemctl status loki.service
Loki服务重启命令:
	systemctl restart loki.service

二、日志推送

(一)、java方式推送
1、pom依赖
<!--Loki 日志收集-->
<dependency>
    <groupId>com.github.loki4j</groupId>
    <artifactId>loki-logback-appender-jdk8</artifactId>
    <version>1.5.1</version>
</dependency>
<!--Loki 日志发送http请求和响应工具-->
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
2、yml文件配置
# Loki 日志
loki:
  # Loki服务地址,需要将日志推送到的地址 默认端口:3100(需要确保安装Loki的服务器放行此端口)
  url: http://ip:3100/loki/api/v1/push
  # 标签,用于日志筛选;可根据自己需要添加或修改
  label:
    # 环境
    env: 开发
    # 工作名称,默认为项目名称
    job-name: @artifactId@
    # 主机名称,不要填localhost,不然无法区分
    host-ip: 192.168.1.190
3、logback-spring.xml文件
<?xml version="1.0" encoding="UTF-8"?>

<configuration>

    <!-- 彩色控制台控制 -->
    <substitutionProperty name="log.pattern" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
    <substitutionProperty name="log.pattern.no" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) ${PID:-} %clr(---){faint} %clr(%-80.80logger{79}){cyan} %clr(:){faint} %m%n%wEx"/>
    <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

    <springProperty scope="context" name="LOG_FILE_DIR" source="logback.log-file-dir"
    defaultValue = "log"/>

    <!-- 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern}</pattern>
        </encoder>
        <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-40.40logger{39} : %m%n</pattern>-->
    </appender>

	<!-- 对应yml中属性,可自行添加或修改 -->
    <springProperty scope="context" name="url" source="loki.url"/>
    <springProperty scope="context" name="env" source="loki.label.env"/>
    <springProperty scope="context" name="jobName" source="loki.label.job-name"/>
    <springProperty scope="context" name="hostIp" source="loki.label.host-ip"/>
    <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
        <http class="com.github.loki4j.logback.ApacheHttpSender">
            <url>${url}</url>
        </http>
        <format>
            <label>
                <pattern>env=${env},jobName=${jobName},hostIp=${hostIp},logLevel=%level</pattern>
            </label>
            <message>
                <pattern>${log.pattern.no}</pattern>
            </message>
            <sortByTime>true</sortByTime>
        </format>
    </appender>

	<!-- 使用异步方式将日志推送至Loki -->
    <appender name="ASYNC_LOKI" class="ch.qos.logback.classic.AsyncAppender">
        <!-- 队列大小设置,根据实际需要调整 -->
        <queueSize>512</queueSize>
        <!-- 丢弃策略,当队列满时采取的操作 -->
        <discardingThreshold>0</discardingThreshold>
        <neverBlock>true</neverBlock>
        <!-- 实际的Loki Appender -->
        <appender-ref ref="LOKI" />
    </appender>

    <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>DENY</onMatch>
            <onMismatch>ACCEPT</onMismatch>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern.no}</pattern>
            <!--<pattern>%msg%n</pattern>-->
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${LOG_FILE_DIR}\info.%d.log</fileNamePattern>
            <!--保留30天日志-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${log.pattern.no}</pattern>
            <!--<pattern>%msg%n</pattern>-->
        </encoder>
        <!--滚动策略-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--路径-->
            <fileNamePattern>${LOG_FILE_DIR}\error.%d.log</fileNamePattern>
            <!--保留30天日志-->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="fileInfoLog" />
        <appender-ref ref="fileErrorLog" />
        <appender-ref ref="ASYNC_LOKI" />
    </root>

</configuration>
(二)、Promtail方式推送
1、修改promtail-local-config.yaml配置
#  prometail.yaml 配置文件
# 配置 Promtail 服务端
server:
  # HTTP 服务监听的端口(0表示随机)
  http_listen_port: 9080
  # gRPC 服务监听的端口(0表示随机)
  grpc_listen_port: 0

# 描述了如何将读取的文件偏移量保存到磁盘上
positions:
  # positions 文件的路径
  filename: ./positions.yaml

# 描述 Promtail 如何连接到 Loki 的多个实例,向每个实例发送日志。
clients:
  # Loki 正在监听的 URL
  - url: http://localhost:3100/loki/api/v1/push

# 抓取日志配置
scrape_configs:
  # 用于在 Promtail 中识别该抓取配置的名称。
  - job_name: test
    # 抓取日志静态目标配置
    static_configs:
      - targets:
          - localhost
        labels:
          # 环境:开发、测试、生产
          env: 开发
          job: test
          host: localhost
          # 要加载日志的路径
          __path__: xxx/logs/*.log
2、脚本安装Promtail
# 1、取消install.sh中promtail_install "$1" "$2"注释
# 2、执行命令(第一个参数:promtail压缩包全名称;第二个参数:压缩包解压后绝对路径)
sh install.sh 'promtail-linux-amd64.zip' '/usr/local/promtail/data'
3、Promtail启动相关命令
Promtail服务启动命令:
	systemctl start promtail.service
Promtail服务停止命令:
	systemctl stop promtail.service
Promtail服务状态命令:
	systemctl status promtail.service
Promtail服务重启命令:
	systemctl restart promtail.service

三、安装Grafana

1、Grafana安装
yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.2-1.x86_64.rpm
2、开放3000端口供用户访问页面
3、Grafana启动相关命令
Grafana服务启动命令:
	systemctl start grafana-server.service
Grafana服务停止命令:
	systemctl stop grafana-server.service
Grafana服务状态命令:
	systemctl status grafana-server.service
Grafana服务重启命令:
	systemctl restart grafana-server.service
4、Grafana页面访问

路径:http://ip:3000
用户名:(默认:admin)
密码:(默认:admin)

  • 16
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值