后端服务集成Loki日志聚合系统

参考资料

一、下载解压loki

安装在/usr/local/bin目录中去:cd /usr/local/bin

通过wget下载loki安装包:wget https://github.akams.cn/https://github.com/grafana/loki/releases/download/v2.9.1/loki-linux-amd64.zip

解压loki:unzip loki-linux-amd64.zip

更改解压后的程序名称:从loki-linux-amd64改成loki

赋予权限:sudo chmod a+x /usr/local/bin/loki

二、创建loki配置文件

创建文件夹:sudo mkdir -p /etc/loki

在/etc/loki目录中创建文件:sudo touch /etc/loki/loki-config.yaml

loki-config.yaml

auth_enabled: false
server:
  http_listen_port: 3100
  grpc_listen_port: 9096
common:
  path_prefix: /var/lib/loki  # 持久化目录
  storage:
    filesystem:
      chunks_directory: /var/lib/loki/chunks  # 存储 chunks 的目录
      rules_directory: /var/lib/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
limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h
  retention_period: 720h  # 日志保留 30 天
compactor:
  working_directory: /var/lib/loki/compactor  # Compactor 的工作目录
  shared_store: filesystem
  retention_enabled: true
  retention_delete_delay: 2h
  retention_delete_worker_count: 10

三、创建Loki服务

新建服务文件 :sudo touch /etc/systemd/system/loki.service

loki.service

[Unit]
Description=Loki Log Aggregation System
After=network.target

[Service]
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-config.yaml
Restart=always

[Install]
WantedBy=multi-user.target

依次执行下面命令,最后出现绿灯则启动成功

sudo systemctl daemon-reload
sudo systemctl start loki
sudo systemctl enable loki
sudo systemctl status loki

四、配置Grafana

跟着下面图点,配置下ip就行了

最后这步如果报错,试一试部署下面的promtail,部署完了再回来点

五、配置Grafana如果报错,安装promtail(第四步没报错,就不用管这一步)

安装步骤跟第一步安装Loki基本完全一致,这里直接贴命令

下载并解压(记得改下文件名,改成promtail)

​
wget https://github.akams.cn/https://github.com/grafana/loki/releases/download/v2.9.1/promtail-linux-amd64.zip
unzip promtail-linux-amd64.zip
sudo mv promtail-linux-amd64 /usr/local/bin/promtail
sudo chmod a+x /usr/local/bin/promtail

创建配置文件
sudo mkdir -p /etc/promtail
sudo nano /etc/promtail/promtail-config.yaml

promtail-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  # loki的地址,根据实际情况配置

scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/**/*.log

配置服务并启动 /etc/systemd/system/promtail.service

promtail.service

[Unit]
Description=Promtail Log Collector
After=network.target

[Service]
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail-config.yaml
Restart=always

[Install]
WantedBy=multi-user.target

服务配置命令
sudo systemctl daemon-reload
sudo systemctl start promtail
sudo systemctl enable promtail
sudo systemctl status promtail  

六、SpringBoot项目配置

引入依赖

pom.xml

            <!--log4j集成loki-->
        <dependency>
            <groupId>com.github.loki4j</groupId>
            <artifactId>loki-logback-appender</artifactId>
        </dependency>

        <!--编译器,用于在xml配置文件中写动态配置-->
        <dependency>
            <groupId>org.codehaus.janino</groupId>
            <artifactId>janino</artifactId>
            <version>3.1.9</version>
        </dependency>

在项目bootstrap.yml配置文件中写一下配置,这里url配"DISABLED",表示如果未填写url,则不加载loki相关的配置项(动态加载的实现方式由logback-spring.xml中的编译器实现)

配置app和env作为日志的元数据(标签)

由于log4j加载优先级较高,会在项目启动spring还未完全加载的时候读取配置,必须把loki的相关配置写在加载优先级最高的bootstrap.yml中(同理nacos配置)。

# Loki 日志采集配置
loki:
  url: ${LOKI_ADDR:DISABLED}
  app: ${spring.application.name}
  env: ${spring.profiles.active}

在logback-spring.xml日志配置文件中加入一下配置

logback-spring.xml

<!-- loki.url如果配置的“DISABLED”,则不加载loki Appender -->
        <if condition='!"DISABLED".equals(property("lokiUrl"))'>
        <then>
            <!-- Loki 日志 Appender -->
            <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
                <batchMaxItems>1</batchMaxItems>
                <http>
                    <url>${lokiUrl}</url>
                </http>
                <format>
                    <label>
                        <pattern>app=${app},env=${env},host=localhost,level=%level</pattern>
                    </label>
                    <message>
                        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{56}.%method:%L - %msg%n</pattern>
                    </message>
                </format>
            </appender>

            <!-- 异步 Loki Appender -->
            <appender name="ASYNC_LOKI" class="ch.qos.logback.classic.AsyncAppender">
                <queueSize>512</queueSize>
                <discardingThreshold>0</discardingThreshold>
                <neverBlock>true</neverBlock>
                <appender-ref ref="LOKI"/>
            </appender>
        </then>
    </if>

    <!-- 设置日志级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="ERROR"/>
      <!-- loki.url如果配置的“DISABLED”,则不加载loki Appender -->
        <if condition='!"DISABLED".equals(property("lokiUrl"))'>
            <then>
                <appender-ref ref="ASYNC_LOKI"/>
            </then>
        </if>
    </root>

七、在Grafana中查看日志

在grafana中找到Explore,上面选择Loki

输入{app="hgtc-station-server", env="test"},查询station的日志,查到就是成功了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值