拯救了 2个G !打造轻量级日志平台

picture.image

苏三的八股文学习网站:www.susan.net.cn

大家好,我是苏三。

前阵子双十一跟风买了 99 元的 2 核 2 G 的小水管,该说不说,确实便宜,但就是买来不知道干啥,本身我已经有了一个比较高配置的服务器,这个 2G 的小水管 docker 装点啥都容易崩溃,本来想用 skywalking + es 搭 一个分布式链路追踪平台,这样方便做自己项目的监控。

结果我还是太高看 2G 内存了,docker 装完我还习惯性设置了 restart = always,于是就悲剧了,服务器直接卡死,重启也不好使,后来还是找工作人员解决了。

链路追踪这条路走不通了,退而求其次追踪下日志吧,ELK 肯定是用不了,最起码得 4G 起步,网上找了好久,终于锁定了 Loki 这个轻量级日志框架,下面是我搭建起来配合 Grafana 可视化的结果,整体还是挺好上手的,本期就出一篇教程,各位可以参考自己搭一套起来。

picture.image

环境部署

组件就两个,Loki 和 Grafana,非常轻量,实测 Docker 运行大概不到 1G 内存,下面是 docker-compose.yml 文件(docker 和 docker-compose 的安装大家自行谷歌哈):


        
          
version: "3"  
  
networks:  
  loki:  
  
services:  
  loki:  
    image: grafana/loki:latest  
    ports:  
      - "3100:3100"  
    command: -config.file=/etc/loki/local-config.yaml  
    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  
  

      

docker-compose.yaml 所在的目录执行下面这个命令行,拉镜像并启动容器:


        
          
docker-compose -f docker-compose.yaml up  

      

docker ps 观察到两个容器在运行即为安装部署成功。

SpringBoot 集成 Loki 上传日志

SpringBoot 集成 Loki 的实质就是将 LokiLogback 进行集成,在产生日志时调用 Loki 的push接口,将微服务日志上传到 Loki 服务器,故而可以实现分布式日志监控。

除了 logback,还需要引入 loki-logback-appender-jdk8 依赖:


        
          
<dependency>  
    <groupId>com.github.loki4j</groupId>  
    <artifactId>loki-logback-appender-jdk8</artifactId>  
    <version>1.4.2</version>  
</dependency>  

      

logback-spring.xml 文件:


        
          
<!-- loki日志上传 -->  
<springProperty name="serverIP" scope="context" source="spring.cloud.client.ip-address" defaultValue="0.0.0.0"/>  
<springProperty name="serverPort" scope="context" source="server.port" defaultValue="0000"/>  
<springProperty name="appName" scope="context" source="spring.application.name"/>  
<springProperty name="lokiUrl" scope="context" source="loki.url"/>  
  
<property name="APP\_NAME" value="${appName}"/>  
<property name="LOKI\_URL" value="${lokiUrl}"/>  
  
<appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">  
            <http class="com.github.loki4j.logback.ApacheHttpSender">  
                <url>${LOKI_URL}/loki/api/v1/push</url>  
            </http>  
            <format>  
                <label>  
                    <pattern>app=${APP_NAME},host=${HOSTNAME},instance=${serverIP}:${serverPort}, level=%level</pattern>  
                </label>  
                <message>  
                    <pattern>l=%level h=${HOSTNAME} i=${serverIP}:${serverPort} c=%logger{20} t=%thread | %msg %ex</pattern>  
                </message>  
                <sortByTime>true</sortByTime>  
            </format>  
        </appender>  
<!-- 日志输出级别 -->  
<root level="INFO">  
    <appender-ref ref="LOKI"/>  
</root>  

      

lokiUrl 配置在 application.yml 中(注意这里填你服务器的 ip 或者本地 ip):


        
          
# loki配置  
loki:  
  url: http://192.168.11.11:3100  

      

后续所有通过 logback 打出来的日志比如 log.errorlog.info 等等都会被汇总到 Loki 中

Grafana 可视化 Loki

前置工作已准备完毕,接下来我们使用Grafana来配置展示服务信息和日志信息。

访问 http://服务器ip:3000/login,进入 Grafana 登录页,默认用户名密码都是 admin,首次登录会引导进行密码修改。

picture.image

进入之后点击 Data Source 添加数据源:

picture.image

找到 Loki,Connection 中的 Url 可以直接填 http://容器名:3100

picture.image

填完后拉到最后 Test 下连接是否成功:

picture.image

连接成功后就可以添加 Dashboard 了,查询语句里面可以简单写一个 {app="appName"},这里的 appName 就是你在项目配置文件中配置的 spring.application.name,这样就可以在这个 DashBoard 中看到这个项目的日志了。

picture.image


最后欢迎 加入苏三的星球,你将获得:商城微服务系统、商城系统、秒杀系统、代码生成工具、苏三demo系统等项目实战。系统设计、性能优化、技术选型、高频面试题、底层原理、Spring源码解读、工作经验分享、痛点问题等多个优质专栏。

picture.image

还有1V1答疑、修改简历、职业规划、送书活动、技术交流。 目前星球已经更新了 4500+ 篇优质内容,还在持续爆肝中.....

星球已经被官方推荐了3次,收到了小伙伴们的一致好评。戳我加入学习,已有1500+小伙伴加入学习。

picture.image

0
0
0
0
评论
未登录
暂无评论