Skip to content

分布式日志系统搭建

第一步:安装 LOKI 日志处理引擎

下载程序文件:https://github.com/grafana/loki/releases

这里下载的是:https://github.com/grafana/loki/releases/download/v3.4.5/loki-windows-amd64.exe.zip

解压到 c:\mes-apps\loki-service

在目录新增配置文件 loki-config.yaml:

yaml
# This is a complete configuration to deploy Loki backed by the filesystem.
# The index will be shipped to the storage via tsdb-shipper.
auth_enabled: false

server:
  http_listen_port: 3100

common:
  ring:
    instance_addr: 127.0.0.1
    kvstore:
      store: inmemory
    replication_factor: 1
  path_prefix: D:\loki-windows\data\

schema_config:
  configs:
    - from: 2025-11-29
      store: tsdb
      object_store: filesystem
      schema: v13
      index:
        prefix: index_
        period: 24h

storage_config:
  filesystem:
    directory: D:\loki-windows\data\chunks

table_manager:
  retention_deletes_enabled: true
  retention_period: 2160h  # 日志保留90天

limits_config:
  reject_old_samples: true
  reject_old_samples_max_age: 168h  # 只接受最近7天的日志,超过直接拒绝写入

里面的配置信息请参考官方帮助文件可进行调整。

配置完成后,请使用 nssm 对其进行服务化启动。Nssm 命令参数参考如下:

Path= C:\loki-windows\loki-windows-amd64.exe
startupDirectory= C:\loki-windows
arguments= -config.file=loki-config.yaml

第二步:安装 Promtail 日志收集服务

下载程序文件:https://github.com/grafana/loki/releases

比如下载这个:https://github.com/grafana/loki/releases/download/v3.4.5/promtail-windows-amd64.exe.zip

注意,Promtail 是日志收集的小工具,哪里产生日志他就安装在那里,也就是说产生的日志的服务器都要安装,而 loki 是中心化的,只需要安装一个;grafana 也是中心化的,只需要安装一个。

将 Promtail 程序文件解压到 c:\mes-apps\loki-service

新增一个配置文件:promtail.yaml

yaml
server:
  http_listen_port: 3188
  grpc_listen_port: 0

positions:
  filename: ./promtail_positions.yaml
  ignore_invalid_yaml: true  # 忽略无效的yaml内容
  sync_period: 10s  # 更频繁地同步位置文件

clients:
  - url: http://10.11.5.59:3100/loki/api/v1/push

scrape_configs:
  - job_name: nlog-logs
    static_configs:
      - targets:
          - localhost
        labels:
          app: RMES-APP-53
          __path__: D:\\mes-apps\\logs\\*\\*.log
    relabel_configs:
      - source_labels: [__path__]
        regex: ^.*[/\\]([^/\\]+)$
        target_label: filename
        replacement: $1
    pipeline_stages:
      - multiline:
          firstline: ^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}
          max_wait_time: 3s
      - regex:
          expression: ^(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3})\s+(?P<level>\w+)\s+(?P<message>(?s:.*))$
      - timestamp:
          source: timestamp
          format: "2006-01-02 15:04:05.000"
          location: Asia/Shanghai
      - output:
          source: message

里面的配置信息请参考官方帮助文件可进行调整。

配置完成后,请使用 nssm 对其进行服务化启动。Nssm 命令参数参考如下:

Path= C:\loki-windows\promtail-windows-amd64.exe
startupDirectory= C:\loki-windows
arguments= -config.file=promtail.yaml

可选:使用 Alloy 替代 Promtail

hcl
// 1. 文件发现(支持 * 通配符)
local.file_match "nlog_logs" {
  path_targets = [{
    __path__ = "D:/mes-apps/logs/*/*.log",
    service_name = "RMES-APP-53",
  }]
}

// 2. 读取文件 + 读取后立刻提取纯文件名
loki.source.file "nlog_logs" {
  targets = local.file_match.nlog_logs.targets
  forward_to = [loki.relabel.filename.receiver]
}

// 3. 后置 relabel:把完整路径改成纯文件名
loki.relabel "filename" {
  forward_to = [loki.process.nlog_logs.receiver]
  rule {
    source_labels = ["filename"]
    regex = "^.*[/\\\\]([^/\\\\]+)$"
    replacement = "$1"
    target_label = "filename"
    action = "replace"
  }
}

// 4. 日志内容处理(多行 + 时间戳 + level 标签)
loki.process "nlog_logs" {
  forward_to = [loki.write.default.receiver]
  stage.multiline {
    firstline = "^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}"
    max_wait_time = "3s"
  }
  stage.regex {
    expression = "^(?P<timestamp>\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3})\\s+(?P<level>\\w+)\\s+(?P<message>(?s:.*))$"
  }
  stage.timestamp {
    source = "timestamp"
    format = "2006-01-02 15:04:05.000"
    location = "Asia/Shanghai"
  }
  stage.labels {
    values = {
      level = "level",
    }
  }
  stage.output {
    source = "message"
  }
}

// 5. 推送到 Loki
loki.write "default" {
  endpoint {
    url = "http://10.11.5.59:3100/loki/api/v1/push"
  }
}

启动参数:run alloy.river --storage.path=./data --server.http.listen-addr=0.0.0.0:3188

第三步:安装 Grafana 日志查看器

下载程序文件:https://grafana.com/grafana/download

比如直接下载这个版本:https://dl.grafana.com/enterprise/release/grafana-enterprise-12.1.0.windows-amd64.msi

按默认一路 next 安装完成。安装完成后登录 http://localhost:3000

默认的账号密码是 admin/admin,需要完成 grafana 对数据源的配置,就是 loki 的日志对接到 grafana

HiMind 工业互联网平台 技术文档