跳到主要内容

VictoriaLogs Docker 版部署

前置说明

如果你还没做 MongoDB 日志切割,请先看 MongoDB 日志切割。 Docker 版已经内置 Grafana 和慢查询面板,部署完成后可直接使用。

前提条件

  • 已安装 docker
  • 已安装 docker-compose

部署 VictoriaLogs + Grafana

  1. 下载镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/hap-mdy/hap-monitor-victorialogs-grafana-amd64:1.0.0
  2. 创建配置文件与数据目录

    mkdir -p /usr/local/victoria-logs-linux
    mkdir -p /data/victorialogs
    mkdir -p /data/grafana
  3. 创建配置文件

    cat > /usr/local/victoria-logs-linux/hap-monitor-logs.yaml << 'EOF'
    services:
    hap-monitor-logs:
    image: registry.cn-hangzhou.aliyuncs.com/hap-mdy/hap-monitor-victorialogs-grafana-amd64:1.0.0
    container_name: hap-monitor-logs
    restart: always
    ports:
    # VictoriaLogs HTTP API
    - "9428:9428"
    # Grafana Web UI
    - "3000:3000"
    volumes:
    # VictoriaLogs 数据目录
    - /data/victorialogs:/data/victorialogs
    # Grafana 数据目录
    - /data/grafana:/usr/local/grafana/data
    environment:
    # 时区
    TZ: Asia/Shanghai
    # Go Runtime Heap 限制,建议 <= mem_limit
    GOMEMLIMIT: 2GiB
    #####################################################################
    # VictoriaLogs
    #####################################################################
    # 数据目录
    VL_STORAGE_DATA_PATH: /data/victorialogs
    # HTTP 监听地址
    VL_HTTP_LISTEN_ADDR: ":9428"
    # Basic Auth
    VL_HTTP_AUTH_USERNAME: myuser
    VL_HTTP_AUTH_PASSWORD: mypassword
    # 数据保留时间
    VL_RETENTION_PERIOD: 30d
    # 最大磁盘占用
    VL_RETENTION_DISK_USAGE: 50GiB
    # 内部 cache 百分比
    VL_MEMORY_ALLOWED_PERCENT: "2"
    # 写入并发
    VL_MAX_CONCURRENT_INSERTS: "4"
    # 查询并发
    VL_MAX_CONCURRENT_REQUESTS: "2"
    # 查询超时
    VL_SEARCH_MAX_QUERY_DURATION: 30s
    # 最大查询时间范围
    VL_SEARCH_MAX_QUERY_TIMERANGE: 24h
    # 查询排队超时
    VL_SEARCH_MAX_QUEUE_DURATION: 5s
    # 慢查询日志阈值
    VL_SEARCH_LOG_SLOW_QUERY_DURATION: 3s
    # 单行日志最大大小
    VL_INSERT_MAX_LINE_SIZE_BYTES: "262144"
    # 单行最大字段数
    VL_INSERT_MAX_FIELDS_PER_LINE: "300"
    # syslog 附加字段
    VL_SYSLOG_EXTRA_FIELDS_TCP: '{"job":"rsyslog"}'
    # 日志级别
    VL_LOGGER_LEVEL: INFO
    #####################################################################
    # Grafana
    #####################################################################
    # Grafana 子路径
    GRAFANA_SERVER_ROOT_URL: "%(protocol)s://%(domain)s:%(http_port)s/privatedeploy/mdy/monitor/victorialogs-grafana/"
    # 开启子路径模式
    GRAFANA_SERVER_SERVE_FROM_SUB_PATH: "true"
    # Grafana 默认管理员账号
    GRAFANA_ADMIN_USER: admin
    # Grafana 默认管理员密码
    GRAFANA_ADMIN_PASSWORD: admin@123456
    # 允许加载未签名插件
    GRAFANA_ALLOW_UNSIGNED_PLUGINS: victoriametrics-logs-datasource
    #####################################################################
    # VictoriaLogs Grafana Datasource
    #####################################################################
    # VictoriaLogs 地址
    GRAFANA_VL_DATASOURCE_URL: http://127.0.0.1:9428
    # VictoriaLogs Basic Auth 用户名
    GRAFANA_VL_BASIC_AUTH_USER: myuser
    # VictoriaLogs Basic Auth 密码
    GRAFANA_VL_BASIC_AUTH_PASSWORD: mypassword
    mem_limit: 3g
    memswap_limit: 3g
    cpus: 2.0
    ulimits:
    nofile:
    soft: 102400
    hard: 102400
    logging:
    driver: json-file
    options:
    # 单日志文件大小
    max-size: "100m"
    # 保留日志文件数量
    max-file: "3"
    EOF

    变量说明:

    • VL_HTTP_AUTH_USERNAMEVL_HTTP_AUTH_PASSWORD 用于 VictoriaLogs 的 Basic Auth 认证,建议按现场规范改成更复杂的用户名和密码,不要直接沿用示例值
    • VL_RETENTION_PERIOD 用于设置日志保留时长,例如 30d 表示保留 30 天
    • VL_RETENTION_DISK_USAGE 用于设置 VictoriaLogs 的磁盘占用上限,例如 50GiB 表示最多使用 50 GiB 磁盘空间
    • 如果日志量比较大,建议同时结合这两个参数一起调整,避免磁盘增长过快
    • GRAFANA_VL_DATASOURCE_URL 用于指定 Grafana 连接 VictoriaLogs 的地址, 如果 VictoriaLogs 不在本机,请改成实际可访问的地址
    • GRAFANA_VL_BASIC_AUTH_USERGRAFANA_VL_BASIC_AUTH_PASSWORD 用于 Grafana 访问 VictoriaLogs 时的 Basic Auth 认证,需要和 VictoriaLogs 的认证信息保持一致
  4. 启停服务

    # 启动
    docker-compose -f /usr/local/victoria-logs-linux/hap-monitor-logs.yaml up -d
    # 停止
    docker-compose -f /usr/local/victoria-logs-linux/hap-monitor-logs.yaml down

部署日志采集器 Promtail

Promtail 需要部署在每一台 MongoDB 节点上,直接读取本机的 mongodb.log 并把慢查询日志推送到 VictoriaLogs。

注意事项:

  • PROMTAIL_PUSH_URL 需要改成实际的 VictoriaLogs 地址
  • PROMTAIL_USERNAMEPROMTAIL_PASSWORD 需要改成 VictoriaLogs 的真实认证信息
  • PROMTAIL_JOB_NAME 需要在每台 MongoDB 节点上保持唯一,便于区分日志来源
  • PROMTAIL_LOG_PATH 需要改成当前节点上 MongoDB 日志文件的绝对路径
  • 如果每台 MongoDB 节点的日志路径不同,请分别调整对应配置
  1. 下载镜像

    docker pull registry.cn-hangzhou.aliyuncs.com/hap-mdy/hap-promtail-vlogs-mongodb-amd64:1.0.0
  2. 创建配置文件与数据目录

    mkdir -p /usr/local/promtail-vlogs
    mkdir -p /usr/local/promtail-vlogs/promtail-data
  3. 创建配置文件

    cat > /usr/local/promtail-vlogs/promtail-vlogs-mongodb.yaml << 'EOF'
    services:
    promtail-vlogs-mongodb:
    image: registry.cn-hangzhou.aliyuncs.com/hap-mdy/hap-promtail-vlogs-mongodb-amd64:1.0.0
    container_name: promtail-vlogs-mongodb
    restart: always
    network_mode: host
    environment:
    PROMTAIL_PUSH_URL: http://172.17.30.241:9428/insert/loki/api/v1/push
    PROMTAIL_USERNAME: myuser
    PROMTAIL_PASSWORD: mypassword
    PROMTAIL_JOB_NAME: mongodb-01
    PROMTAIL_LOG_PATH: /data/logs/mongodb/mongodb.log
    volumes:
    - /data/logs/mongodb/mongodb.log:/data/logs/mongodb/mongodb.log:ro
    - ./promtail-data:/data/promtail
    deploy:
    resources:
    limits:
    cpus: '1'
    memory: 1G
    EOF

    cat > /usr/local/promtail-vlogs/promtail-data/positions.yaml << 'EOF'
    positions: {}
    EOF
  4. 启停服务

    # 启动
    docker-compose -f /usr/local/promtail-vlogs/promtail-vlogs-mongodb.yaml up -d
    # 停止
    docker-compose -f /usr/local/promtail-vlogs/promtail-vlogs-mongodb.yaml down

代理转发配置 Grafana

upstream grafana {
server 192.168.1.10:3000;
}

map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}

server {
listen 80;
server_name hap.domain.com;
access_log /data/logs/weblogs/grafana.log main;
error_log /data/logs/weblogs/grafana.mingdao.net.error.log;

location /privatedeploy/mdy/monitor/victorialogs-grafana/ {
#allow 1.1.1.1;
#deny all;
proxy_hide_header X-Frame-Options;
proxy_set_header X-Frame-Options ALLOWALL;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
proxy_redirect http://localhost:3000 http://hap.domain.com:80/privatedeploy/mdy/monitor/victorialogs-grafana;
}

location /privatedeploy/mdy/monitor/victorialogs-grafana/api/live {
rewrite ^/(.*) /$1 break;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $http_host;
proxy_pass http://grafana;
}
}

代理配置好后即可通过以下地址访问 Grafana 页面:

http://hap.domain.com/privatedeploy/mdy/monitor/victorialogs-grafana

组合部署参考

  • VictoriaLogs 与 Grafana 已经在同一个 Docker 组合里部署,不需要额外单独安装 Grafana。
  • Promtail 需要部署在每台 MongoDB 节点上,保证每个节点都能采集本机日志。
  • 如果不同节点的 MongoDB 日志目录不一致,请在对应节点上单独修改 PROMTAIL_LOG_PATH

访问说明

  • VictoriaLogs 默认监听 9428 端口。
  • Grafana 默认监听 3000 端口,并通过反向代理子路径对外提供访问。
  • 如果需要接入现有 Nginx 或网关,请确保子路径与 GRAFANA_SERVER_ROOT_URL 保持一致。