醋醋百科网

Good Luck To You!

拯救 2G 小水管!打造轻量级日志平台

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

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

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

环境部署

组件就两个,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,首次登录会引导进行密码修改。

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

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

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

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


控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言