参考资料
一、下载解压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的日志,查到就是成功了