服务器日志太分散不好查?我用Promtail+Loki+Grafana把采集、查询和分析串起来了
前言
服务器一多,日志最先失控。单机时代还能靠 tail -f 临时看两眼,到了多服务、多目录甚至多主机环境,真正麻烦的是:日志分散在哪里、哪个服务出了错、同一时间段发生了什么,怎么把这些信息集中起来查。
这次我把 Promtail、Loki 和 Grafana 这条 PLG 日志链完整跑一遍。先按 CentOS 7 环境分别部署 Loki、Grafana 和 Promtail,确认日志能够从采集端推到 Loki,再在 Grafana 里完成查询。
随后再补一套 Docker Compose 一体化方案,并实际写入测试日志、JSON 结构化日志、Nginx 和 Auth 多日志源,继续用 LogQL 做过滤和统计。
最后把 Grafana 的 3000 端口提供给外部设备访问,并从随机地址切换到固定二级子域名。整篇重点不是简单说"PLG 比 ELK 更轻",而是把采集 → 存储 → 查询 → 结构化解析 → 多日志源 → 远程访问这条链真正跑通。
这类日志平台真正有价值的地方,也不是把三个组件装在一起,而是出了问题以后能沿着同一条链去查:哪台机器、哪个服务、哪个时间段、哪类错误,都尽量从统一入口定位。等日志量逐渐上来以后,这种集中查询会比逐台服务器翻文件更省时间。
而且后面如果继续增加服务,只需要继续补采集规则和标签,不必重新换一套日志平台。

1 先把Promtail、Loki、Grafana的分工弄清楚
这三个组件各自负责不同的一层。
Promtail:采集日志
它负责盯住指定日志文件,把日志附上 job、host 等标签,再推给Loki。
Loki:存储和查询日志
它不会像传统全文检索系统那样给每一行日志做完整全文索引,而是更依赖标签组织日志流。
Grafana:查询和可视化
最终人在浏览器里使用Grafana,通过Loki数据源和LogQL查看日志、筛选错误、做统计。
整条链可以先记成:
日志文件 → Promtail → Loki → Grafana
2 这套日志链适合什么场景
比较常见的使用方式包括:
- 多服务日志集中查看;
- 按服务名、主机、环境筛选;
- 实时排障;
- 结构化JSON日志查询;
- Nginx、Auth、应用日志统一查看;
- 基于LogQL做趋势和错误统计;
- 后续继续结合Grafana告警。
如果主要需求是复杂全文检索、重度文本分析,仍然要根据实际场景选择日志方案。
PLG更适合标签先过滤、再查看日志内容的使用方式。
3 先看几个典型LogQL例子
按标签过滤:
{job="app"} |= "error"
正则匹配:
{job="nginx"} |~ "404|500"
统计日志速率:
rate({job="api"}[5m])
后面还会继续测试JSON解析和多日志源。
4 环境准备:CentOS 7
这次环境按:
- CentOS Linux 7.x;
- root或sudo权限;
- 服务器可以下载安装包;
来准备。
源配置里需要涉及:
- Loki;
- Promtail;
- Grafana;
以及后续使用的相关端口。
先按当前操作关闭firewalld,或者自行改成开放需要的端口:
shell
systemctl stop firewalld
systemctl disable firewalld
# 或使用 iptables/firewalld 开放端口
如果是长期生产环境,更适合按实际端口做最小范围放行,而不是为了省事一直关闭防火墙。
5 安装基础工具
执行:
shell
yum update -y
yum install -y wget tar curl vim net-tools
这一步准备:
- wget;
- tar;
- curl;
- vim;
- net-tools。
6 可选:创建Loki专用用户
执行:
shell
useradd -r -s /sbin/nologin loki
如果后面完全按自己的权限模型运行,也可以再调整目录属主和启动方式。
7 第一条部署路线:先手动安装Loki
这部分先把Loki独立跑起来。
进入目录并下载:
shell
cd /app/loki
curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/loki-linux-amd64.zip"
页面:

这里文字说明与实际下载地址中的版本号不完全一致。
为了保持已经跑通过程不变,命令和下载地址按现有记录保留,后续运行也以实际下载到的二进制为准。
8 解压Loki
执行:
shell
unzip loki-linux-amd64.zip
结果:

9 创建Loki数据目录
执行:
shell
mkdir /data/loki
mkdir /data/loki/{chunks,index}
结果:

这套配置把数据放在:
/data/loki/index/data/loki/chunks
后面配置文件会直接引用这两个目录。
10 创建Loki配置文件
编辑:
shell
vi config.yaml
配置保持如下:
shell
auth_enabled: false
server:
http_listen_port: 8094
ingester:
lifecycler:
address: 192.168.42.140 #日志服务器ip,即本机地址
ring:
kvstore:
store: inmemory
replication_factor: 1
final_sleep: 0s
chunk_idle_period: 5m
chunk_retain_period: 30s
schema_config:
configs:
- from: 2024-04-01
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 168h #每张表的时间范围7天
storage_config:
boltdb:
directory: /data/loki/index #索引文件存储地址
filesystem:
directory: /data/loki/chunks #块存储地址
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h
chunk_store_config:
max_look_back_period: 168h
table_manager:
retention_deletes_enabled: true
retention_period: 168h #表的保留期7天
页面:

这里最关键的几项是:
- HTTP监听:
8094 - 本机地址:
192.168.42.140 - replication_factor:
1 - 索引目录:
/data/loki/index - chunk目录:
/data/loki/chunks - 保留期:
168h
也就是先按单机、本地文件系统方式把Loki跑通。
11 给Loki准备启动脚本
创建:
shell
vi start.sh
写入:
shell
#!/bin/bash
nohup ./loki-linux-amd64 -config.file=./config.yaml >./server.log 2>&1 &
echo "$!" > pid
再创建关闭脚本:
shell
vi shutdown.sh
写入:
shell
#!/bin/bash
kill -9 `cat pid`
echo "关闭成功!"
脚本页面:

12 启动Loki并看日志
执行:
shell
sh start.sh
然后查看:
shell
tail -200f server.log
运行结果:

做到这里,Loki这一层已经具备接收Promtail日志的基础。
13 接下来安装Grafana
这套流程先处理CentOS上的防火墙和SELinux:
shell
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
同样,长期环境更建议根据自己的安全策略处理端口和SELinux规则,不要机械理解成"必须永久关闭"。
14 Grafana不同系统安装方式
Ubuntu / Debian方式:
shell
sudo apt-get install -y adduser libfontconfig1 musl
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_12.1.0_amd64.deb
sudo dpkg -i grafana-enterprise_12.1.0_amd64.deb
Standalone Linux Binaries方式:
shell
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-12.1.0.linux-amd64.tar.gz
tar -zxvf grafana-enterprise-12.1.0.linux-amd64.tar.gz
Red Hat、CentOS、RHEL、Fedora方式:
shell
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-12.1.0-1.x86_64.rpm
OpenSUSE / SUSE方式:
shell
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-12.1.0-1.x86_64.rpm
sudo rpm -Uvh grafana-enterprise-12.1.0-1.x86_64.rpm
这篇实际使用的是CentOS,所以真正执行的是:
shell
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-12.1.0-1.x86_64.rpm
15 启动Grafana并设置开机自启
执行:
shell
systemctl restart grafana-server
systemctl enable grafana-server
查看版本:
shell
grafana-cli -version
结果:

16 浏览器打开Grafana
访问:
shell
ip:3000
页面:

第一次登录默认账号密码:
admin / admin
登录页:

认证后修改密码:

进入后台:

如果后面准备远程访问,这一步更不能继续保留默认密码。
17 再安装Promtail
创建安装目录后下载:
shell
cd /app/promtail
curl -O -L "https://github.com/grafana/loki/releases/download/v1.5.0/promtail-linux-amd64.zip"
解压:
shell
unzip promtail-linux-amd64.zip
结果:

18 配置Promtail采集日志
编辑:
shell
vi promtail.yaml
配置保持如下:
shell
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: ./positions.yaml
clients:
- url: http://192.168.42.140:8094/loki/api/v1/push #日志服务器loki地址和端口
scrape_configs:
#ucenter1
- job_name: zcbackend-172.29.21.22-1
static_configs:
- targets:
- 192.168.42.140
- labels:
job: zcbachend-172.29.21.22-1
host: 192.168.42.140
__path__: /jiuqi/zichan/zichanyitihuazhenghexiangmu-8084/backend/server.log #本机日志路径
页面:

这里Promtail做了三件事:
- 自己监听
9080; - 把日志推到
192.168.42.140:8094; - 读取指定的
server.log路径。
真正需要按自己环境变化的通常是:
- Loki地址;
- job名称;
- host标签;
__path__日志文件路径。
19 给Promtail准备启动脚本
创建:
shell
vi start.sh
写入:
shell
#!/bin/bash
nohup ./promtail-linux-amd64 -config.file=./promtail.yaml >./server.log 2>&1 &
echo "$!" > pid
再创建关闭脚本:
shell
vi shutdown.sh
页面:

20 启动Promtail并看运行日志
执行:
shell
sh start.sh
继续查看:
shell
tail -200f server.log
结果:

做到这里,手动部署路线已经形成:
应用日志 → Promtail → Loki
后面再把Loki接进Grafana。
21 第二条部署路线:Docker一体化跑PLG
如果不想分别管理三个组件,这篇还保留了一套Docker Compose方案。
先检查Docker:
shell
docker --version
结果:

22 创建Docker部署目录
执行:
shell
mkdir -p /docker/do
chmod -R 777 /do
这里按现有命令保留目录和权限设置。
23 先写Loki和Promtail配置
执行:
shell
mkdir -p /docker/do/loki
# 创建配置文件
cat > /docker/do/loki/config.yml <<EOF
auth_enabled: false
server:
http_listen_port: 3100
common:
path_prefix: /tmp/loki
storage:
filesystem:
directory: /tmp/loki/chunks
replication_factor: 1
ring:
kvstore:
store: inmemory
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
EOF
# 创建目录
mkdir -p /docker/do/promtail
# 创建配置文件
# 创建配置文件
cat > /docker/do/promtail/config.yml <<EOF
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*.log
- job_name: test
static_configs:
- targets:
- localhost
labels:
job: test
__path__: /var/log/test.log
EOF
这组命令一次创建:
/docker/do/loki/config.yml/docker/do/promtail/config.yml
Docker路线中使用:
- Loki:
3100 - Promtail:
9080
Promtail默认采集:
/var/log/*.log/var/log/test.log
24 创建docker-compose.yml
编辑:
shell
vi docker-compose.yml
写入:
shell
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.9.10
ports:
- "3100:3100"
volumes:
- ./loki/config.yml:/etc/loki/config.yml # 👈 挂载配置
command: -config.file=/etc/loki/config.yml # 👈 路径匹配
networks:
- loki
promtail:
image: grafana/promtail:2.9.10
volumes:
- /var/log:/var/log
- ./promtail/config.yml:/etc/promtail/config.yml # 👈 挂载配置
command: -config.file=/etc/promtail/config.yml # 👈 路径匹配
networks:
- loki
user: "root" # 👈 关键!避免权限问题
grafana:
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
页面:

Compose里包含:
grafana/loki:2.9.10grafana/promtail:2.9.10grafana/grafana:latest
端口主要是:
- Loki:
3100 - Grafana:
3000
Promtail则通过Docker网络把日志推到:
http://loki:3100/loki/api/v1/push
25 这里有一项安全配置需要特别注意
这份Compose里保留了:
GF_AUTH_ANONYMOUS_ENABLED=trueGF_AUTH_ANONYMOUS_ORG_ROLE=Admin
也就是开启匿名访问,并给匿名用户Admin角色。
这对快速测试比较省事,但如果后面把Grafana直接开放到公网,这个设置就属于非常高风险配置。
因为技术参数按这套操作保留,所以正文不改Compose。
但长期远程使用时,应重新评估Grafana身份验证和匿名权限,不要把"公网能打开"直接等同于"可以安全长期使用"。
26 启动PLG容器
执行:
shell
docker-compose up -d
结果:

部署状态:

做到这里,Docker路线的三个组件已经启动。
27 在Grafana里添加Loki数据源
先登录Grafana:

进入添加数据源:

搜索:
Loki

测试连接:

连接成功以后,Grafana就可以开始查询Loki里的日志。
28 不要停在"数据源连接成功",继续写一条测试日志
执行:
shell
echo "Test log entry at $(date)" >> /var/log/test.log
这会向:
/var/log/test.log
追加一条测试内容。
29 先从Loki API直接查询
执行:
shell
curl -g 'http://localhost:3100/loki/api/v1/query?query={job="test"}&limit=5'
结果:

如果响应中的 values 已经出现内容,就可以确认:
Promtail → Loki
这条链确实有数据流入。
30 再从Grafana Explore查询
进入Grafana:
- Explore
- 数据源选择Loki
查询:
shell
{job="test"}
运行结果:

到这里完整链路才是:
日志文件 → Promtail → Loki → Grafana
而不只是"容器都显示Up"。
31 接下来模拟真实应用JSON日志
写入:
shell
# 模拟一个 Web 服务日志
cat > /var/log/app.json <<'EOF'
{"level":"info","ts":"2026-06-04T12:00:00Z","msg":"User login","user_id":1001,"ip":"192.168.1.10","method":"POST","path":"/login","status":200}
{"level":"error","ts":"2026-06-04T12:01:05Z","msg":"DB timeout","user_id":1002,"ip":"192.168.1.11","method":"GET","path":"/profile","status":500,"error":"context deadline exceeded"}
{"level":"warn","ts":"2026-06-04T12:02:30Z","msg":"Rate limit hit","user_id":1003,"ip":"192.168.1.12","method":"POST","path":"/api/v1/send","status":429}
EOF
页面:

这组测试数据包含:
- info;
- error;
- warn;
- user_id;
- IP;
- method;
- path;
- status。
比单纯一行字符串更接近日常Web服务日志。
32 给Promtail增加JSON解析
编辑Promtail配置,内容保持如下:
shell
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: test
static_configs:
- targets:
- localhost
labels:
job: test
__path__: /var/log/test.log
- job_name: app-json
pipeline_stages:
- json:
expressions:
level: level
msg: msg
static_configs:
- targets:
- localhost
labels:
job: app
__path__: /var/log/app.json
页面:

这里通过:
pipeline_stages
增加JSON解析。
配置中先提取:
levelmsg
原始JSON日志行仍然保留。
后面在Grafana查询里还会继续使用 | json 做字段解析。
33 重启Promtail加载配置
执行:
shell
docker-compose restart promtail
配置重新加载以后,就可以开始做更细的LogQL查询。
34 查询error级别日志
在Grafana Explore中使用:
shell
{job="app"} | json | level = "error"
结果:

这个查询逻辑是:
先选job=app,再解析JSON,再筛选level=error。
35 查询HTTP状态码
继续执行:
shell
{job="app"} | json | status >= 500
结果:

这样可以直接筛:
status >= 500
的日志。
36 用LogQL做时间窗口统计
执行:
shell
sum by (path) (
count_over_time({job="app"}[5m])
)
结果:

这类查询更适合看:
- 一段时间内日志数量;
- 某服务错误趋势;
- 不同job的变化。
如果后续再结合Grafana面板,就可以把日志查询继续做成图表。
37 再模拟Nginx和Auth日志
写入:
shell
# 模拟 nginx 日志
echo '192.168.1.10 - - [04/Jun/2026:12:10:00 +0000] "GET /api/v1/data HTTP/1.1" 200 1024' >> /var/log/nginx-access.log
# 模拟 auth 服务日志
echo "$(date -Iseconds) [AUTH] User 1001 logged in from 192.168.1.10" >> /var/log/auth.log
页面:

现在测试日志源已经包括:
- test;
- app-json;
- nginx;
- auth。
38 Promtail增加多日志源
配置保持如下:
shell
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: test
static_configs:
- targets: [localhost]
labels:
job: test
__path__: /var/log/test.log
- job_name: app-json
pipeline_stages:
- json:
expressions:
level: level
msg: msg
static_configs: # ← 必须在这里!
- targets: [localhost]
labels:
job: app
__path__: /var/log/app.json
- job_name: nginx
static_configs:
- targets: [localhost]
labels:
job: nginx
__path__: /var/log/nginx-access.log
- job_name: auth
static_configs:
- targets: [localhost]
labels:
job: auth
__path__: /var/log/auth.log
页面:

这一步把不同文件分别挂到不同job:
testappnginxauth
这样后续在Grafana里可以直接按job切换日志流。
39 多日志源真正解决的是什么
页面:

当应用越来越多以后,真正需要的不是把所有日志混在一起。
而是通过标签先缩小范围。
例如:
- 先查auth登录;
- 再查同时间段nginx访问;
- 再看app错误。
这也是Loki使用标签组织日志时更适合的排障方式。
40 本地PLG链到这里已经完整跑通
现在已经完成:
日志文件
↓
Promtail
↓
Loki
↓
Grafana
并且进一步验证了:
- 普通文本日志;
- JSON日志;
- LogQL过滤;
- 状态码筛选;
- 时间窗口统计;
- 多job日志源。
如果只在局域网里使用,做到这里已经足够。
41 远程访问为什么只开放Grafana
真正给人看的入口是Grafana。
Promtail和Loki更多属于后端采集与存储组件。
所以远程访问时,这篇只给:
3000
增加外部Web入口。
这样结构更清楚:
外部浏览器 → Grafana → Loki → 日志
而不是把所有后端端口都同时暴露出去。
42 安装cpolar
执行:
shell
sudo curl https://get.cpolar.sh | sh
结果:

安装完成以后检查服务:
shell
sudo systemctl status cpolar
结果:

确认正常以后,再进入Web管理页面。
43 打开cpolar管理界面
浏览器访问:
服务器IP:9200
页面:

登录以后,后面的Grafana公网入口在这里配置。
44 给Grafana的3000创建HTTP隧道
创建参数:
- 隧道名称:
grafana - 协议:HTTP
- 本地地址:
3000 - 域名类型:随机域名
- 地区:
China Top
页面:

这里映射的是:
Grafana Web端口3000。
45 先用随机公网地址验证
进入在线隧道列表:

从其他网络打开生成的地址:

如果Grafana页面能够正常打开,可以确认:
外部浏览器 → 公网地址 → Grafana:3000
已经跑通。
46 随机地址适合先测试
随机地址更适合验证:
网络链路到底通不通。
如果准备长期远程看日志,再继续配置固定二级子域名。
47 保留Grafana固定二级子域名
进入预留页面:

这次示例名称:
grafana3
页面:

实际使用时,以自己账号最终成功保留的名称为准。
48 编辑Grafana隧道
回到隧道列表:

把域名类型改成二级子域名,并填写已经保留的名称:

49 查看固定地址
进入在线隧道列表:

可以看到原来的随机地址已经切换成固定二级子域名。
50 最后从外部设备再访问一次
使用固定地址打开Grafana:

能够正常进入以后,长期远程入口完成。
整条链现在变成:
外部浏览器 → 固定公网地址 → Grafana:3000 → Loki → 日志数据
51 远程访问时不要忽略Grafana权限
日志平台里可能包含:
- 服务报错;
- 用户ID;
- IP地址;
- 请求路径;
- 认证日志;
- 内部主机信息。
所以公网访问时至少要同时检查:
- 默认管理员密码是否已经修改;
- 是否仍启用匿名访问;
- 匿名用户权限是否过高;
- 公网地址是否无范围传播;
- Grafana用户权限是否合理。
尤其这份Docker Compose测试配置里开启了匿名Admin。
如果用于长期远程环境,这一项比"固定域名好不好记"更值得先处理。
52 手动部署和Docker一体化该怎么选
这篇同时保留了两条路线。
手动部署
优点是每个组件的配置、启动脚本、目录都能单独看清楚。
更适合理解:
- Loki怎么启动;
- Promtail怎么推日志;
- Grafana怎么独立运行。
Docker Compose
优点是三个组件可以在一个网络里一起管理。
更适合:
- 快速搭建;
- 统一启动停止;
- 把配置文件集中保存。
两条路线不需要在同一台机器上重复跑两套。
根据自己的维护方式选一种即可。
53 这套PLG日志系统真正适合什么人
比较适合:
- 有多台服务器或多个服务;
- 日志已经分散到多个目录;
- 经常需要按时间和服务排错;
- 希望用浏览器集中查日志;
- 想用LogQL做过滤和统计;
- 更倾向轻量化日志平台。
如果只有一个小应用,直接看本地日志文件可能已经够用。
日志系统真正开始体现价值,通常是在服务数量和排障频率都上来以后。
54 最后把完整技术链重新看一遍
采集:
日志文件 → Promtail
存储:
Promtail → Loki
查询:
Loki → Grafana
普通日志验证:
test.log → Promtail → Loki API → Grafana
结构化日志:
app.json → JSON解析 → LogQL
多日志源:
test / app / nginx / auth
Docker路线:
Promtail + Loki + Grafana → Docker Compose
远程:
外部浏览器 → 固定公网地址 → Grafana:3000
实际完成:
- CentOS环境准备;
- Loki下载与配置;
- Loki启动脚本;
- Grafana安装;
- Grafana登录;
- Promtail配置;
- Promtail启动;
- Docker Compose一体化部署;
- Loki数据源;
- test.log验证;
- JSON日志;
- LogQL过滤;
- 状态码查询;
- 时间窗口统计;
- Nginx日志;
- Auth日志;
- 多job采集;
- cpolar安装;
- Grafana随机公网访问;
- 固定二级子域名;
- 外部浏览器访问。
这样PLG才真正从"三个组件都装上了",变成一条可以持续采集、集中查询、结构化分析并支持远程查看的日志链。
总结
这次真正跑通的是一条完整的PLG日志链:Promtail负责盯住日志文件并推送,Loki负责存储日志流,Grafana负责查询和展示。文章同时保留了手动部署和Docker Compose两条路线,方便分别理解组件关系和一体化运行方式。
验证部分没有停在"服务启动成功",而是继续写入test.log,通过Loki API确认日志已经进入,再到Grafana Explore里执行LogQL查询。后面又加入JSON日志、错误级别、状态码、多日志源和时间窗口统计,把真实排障里常用的几层逐步补齐。
远程部分只开放Grafana的3000 Web入口,没有把Loki和Promtail后端端口一起公开。随机地址先验证网络链路,固定二级子域名再解决长期入口变化的问题。
真正需要长期注意的是权限。尤其Docker配置中保留了匿名Admin设置,如果Grafana准备长期从公网访问,应优先重新检查认证、匿名权限和管理员账号,而不是只关注公网地址是否固定。日志平台本身往往包含大量内部信息,公网可达和安全可用必须分开处理。