从 0 到 1 搭建日志收集系统 - Loki
从 0 到 1 搭建日志收集系统 - Loki
Loki 是由Grafana出品的日志收集系统,它是由
Go语言开发的,具有轻量、占用内存低、易部署等优点。但是需要搭配使用Grafana生态中的promtail以及就是grafana面板进行使用。
为什么选择Loki
1. 日志是刚需
目前,各种服务都是以容器的方式部署至云服务器中,以及基本都是多个微服务,查看日志相比之前的单体服务而言也就麻烦了许多,那么有没有一种聚合日志的方式来查看呢?那当然是有的,不然遇到几十上百个微服务的情况查看起日志来及其不方便。日志平台的作用主要目的是为了收集各个项目的服务日志,以及快速检索到错误日志等功能,基于这种背景下日志平台也就成了刚需。
2. 节省资源
Loki相较于传统的日志采集系统 ELK (Elasticsearch, Kibana & Logstash) 来说,内存占用低、易部署这两个优点是笔者最看重的,在业务刚起步或者公司体量较小的情况下,选择Loki我认为是上上策。核心还是为了省钱,ELK的方式部署一套至云服务器上面根据官方说法至少需要 2H4G 的资源,那Loki这套1H1G基本就满足需求了。
搭建 & 安装
version: "3"
networks:
  loki:
services:
  loki:
    image: grafana/loki:2.9.2
    ports:
      - "3100:3100"
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      - loki
  promtail:
    image: grafana/promtail:2.9.2
    volumes:
      - ./log:/var/log
    command: -config.file=/etc/promtail/config.yml
    networks:
      - loki
  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
插件
1、安装插件
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
2、查看插件情况
[root@localhost ~]# docker plugin ls
ID                  NAME                DESCRIPTION           ENABLED
827b3c27a761        loki:latest         Loki Logging Driver   true
全容器采集
[root@localhost ~]# more /etc/docker/daemon.json
{
    "debug" : true,
    "log-driver": "loki",
    "log-opts": {
        "loki-url": "http://100.98.100.186:3100/loki/api/v1/push",
        "loki-batch-size": "400"
    }
}
指定容器采集
version: '3'
networks:
  loki:
services:
  nginx:
    image: nginx:latest
    container_name: my_nginx
    ports:
      - "8081:80"
      - "443:443"
    logging:
      driver: loki
      options:
        loki-url: "http://127.0.0.1:3100/loki/api/v1/push"
        loki-batch-size: "100"
        loki-retries: "5"
    networks:
      - loki
参考
欢迎关注我的公众号: 小付同学的开发日常,原创技术文章第一时间推送。