centos部署SkyWalking以及在springcloud项目中搭配loki使用

文章目录

场景

SkyWalking是应用性能监控平台,可用于分布式系统,支持微服务、云原生、Docker、Kubernetes 等多种架构场景。 最近搞了一台家用服务器,下面演示下部署过程以及用法

SkyWalking介绍

部署

  1. Agent:在应用中,收集 Trace、Log、Metrics 等监控数据,使用 RPC、RESTful API、Kafka 等 Transport 传输方式,发送给 OAP 服务
  2. OAP:首先 Receiver 接收 Agent 发送的监控数据,然后 Aggregator 进行聚合计算,之后存储到 Storage 外部存储器,最终提供给 GUI 查询数据
  3. Storage:存储监控数据,支持 Elasticsearch、MySQL、TiDB、H2 等多种数据库
  4. GUI :UI 可视化界面,提供监控数据的查询后台
部署Storage 单机版Elasticsearch
  1. 修改用户的最大文件描述符数量到65535, /etc/security/limits.conf 添加下面的配置
conf 复制代码
root soft nofile 65535
root hard nofile 65535
* soft nofile 65535
* hard nofile 65535

# 限制 root /普通用户的最大文件描述符数量为 65535。
  1. 配置再当前会话生效 (root账号执行)

ulimit -n 65536

  1. 增加 Linux 系统中的内存映射区域的最大数量 在/etc/sysctl.conf添加下面的配置
conf 复制代码
vm.max_map_count=655360

# 默认情况下,Linux 系统通常会有一个较小的 vm.max_map_count 值,例如 1024。如果应用程序需要更高的映射区域(如 Elasticsearch),可能会因为超出该值而报错,增加这个值可以解决此问题。
  1. 执行命令,使配置立刻生效
sh 复制代码
sysctl -p
  1. 下载elasticsearch-6.7.2.tar.gz安装包
sh 复制代码
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.7.2.tar.gz

tar -zxvf elasticsearch-6.7.2.tar.gz

vim elasticsearch-6.7.2/config/elasticsearch.yml
    network.host: 0.0.0.0 # 允许外网访问    
  1. 修改启动脚本, 指定使用jdk1.8 (因为我的环境默认是jdk17, 当前版本的es需要1.8) 该步骤选做
sh 复制代码
vim bin/elasticsearch-env
# 添加下面的配置 (路径是jdk1.8的路径)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
  1. 安装分词器插件
sh 复制代码
cd elasticsearch-6.7.2

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.7.2/elasticsearch-analysis-ik-6.7.2.zip   


unzip elasticsearch-analysis-ik-6.7.2.zip -d plugins/ik/
                                                      
  1. 启动
sh 复制代码
bin/elasticsearch -d
  1. 查看是否部署成功, 浏览器查看 http://自己的ip:9200/
部署SkyWalking OAP 下载地址
  1. 下载脚本
sh 复制代码
wget https://archive.apache.org/dist/skywalking/9.4.0/apache-skywalking-apm-9.4.0.tar.gz
  1. 修改配置
sh 复制代码
vim config/application.yml
# storage.selector 修改成elasticsearch 默认h2
storage:
  selector: ${SW_STORAGE:elasticsearch}
  1. 另外需要自行调整es配置
  2. 启动
sh 复制代码
 bin/oapService.sh start

SkyWalking OAP started successfully!

  1. 启动SkyWalking UI
sh 复制代码
 bin/./webappService.sh start
  1. 访问ui

默认端口8080, webapp/webapp.yml 修改配置

xml 复制代码
server.port :SkyWalking UI 服务端口。
spring.cloud.discovery.client.simple.instances.oap-service :SkyWalking OAP 服务地址数组。因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的
部署SkyWalking Java Agent
  1. 下载
sh 复制代码
wget https://archive.apache.org/dist/skywalking/java-agent/9.0.0/apache-skywalking-java-agent-9.0.0.tgz

springCloud 使用举例

  1. 启动脚本
sh 复制代码
#!/bin/bash

# 配置 SkyWalking Agent 路径
SKYWALKING_AGENT_PATH="-javaagent:/Users/carsonlius/software/skywalking-agent"
# SkyWalking 配置文件(可选,如果需要自定义配置)
SKYWALKING_CONFIG_FILE="${SKYWALKING_AGENT_PATH}/config/agent.config"

# 应用名称(在 SkyWalking 中显示的服务名)
APPLICATION_NAME="trade-server"

# SkyWalking OAP Server 地址
SKYWALKING_COLLECTOR_SERVER="100.64.0.4:11800" # 替换为实际地址

# JVM 启动参数
JAVA_OPTS="-javaagent:${SKYWALKING_AGENT_PATH}/skywalking-agent.jar"
JAVA_OPTS+=" -Dskywalking.agent.service_name=${APPLICATION_NAME}"
JAVA_OPTS+=" -Dskywalking.collector.backend_service=${SKYWALKING_COLLECTOR_SERVER}"

# JAR 文件路径
JAR_FILE="trade-server.jar"

# 运行应用
echo "Starting application with SkyWalking..."
java ${JAVA_OPTS} -jar ${JAR_FILE}
  1. 效果

追踪ID写入loki

  1. 自定义SkyWalkingTraceFilter

MDC 允许你为日志消息添加额外的上下文信息,例如:用户 ID、会话 ID、请求的追踪 ID(如 SkyWalking 的 traceId)。

java 复制代码
package com.carsonlius.cloud.framework.common.filter;

import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.skywalking.apm.toolkit.trace.TraceContext;
import org.slf4j.MDC;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import java.io.IOException;

/**
 * skyWalking的追踪过滤器
 * @author carsonlius
 */
@Component
public class SkyWalkingTraceFilter extends OncePerRequestFilter {

    private static final String TRACE_ID_KEY = "traceId";

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        try {

            MDC.put(TRACE_ID_KEY, TraceContext.traceId());

            // 继续过滤链
            filterChain.doFilter(request, response);
        }  finally {
            MDC.remove(TRACE_ID_KEY);
        }
    }
}
  1. 修改loki配置

修改日志模式 "traceId": "%X{traceId}",

xml 复制代码
    <appender name="LOKI" class="com.github.loki4j.logback.Loki4jAppender">
        <http>
            <url>http://100.64.0.4:3100/loki/api/v1/push</url>
        </http>
        <format>
            <label>
                <pattern>application=${name},level=%level</pattern>
                <readMarkers>true</readMarkers>
            </label>
            <message>
                <pattern>
                        {"timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
                        "level": "%level",
                        "logger": "%logger{36}.%method",
                        "method":"%M",
                        "line":"%line",
                        "thread": "%thread",
                        "traceId": "%X{traceId}",
                        "message": "%msg%n"}
                </pattern>
            </message>
            <sortByTime>true</sortByTime>
        </format>
    </appender>
  1. loki 日志效果
相关推荐
Devin~Y19 小时前
从内容社区到AI智能客服:Spring Boot + Spring Cloud + Spring AI 全栈实战面试拆解
java·spring boot·redis·elasticsearch·spring cloud·kafka·mybatis
☆凡尘清心☆21 小时前
CentOS Stream 9 源码编译搭建 Zabbix7.0.29 完整部署方案(部署成功)
linux·运维·centos
IT机器猫21 小时前
RabbitMQ基础二
java·spring boot·分布式·spring cloud·log4j·rabbitmq·springamqp
卷心菜的学习路21 小时前
基于 Spring Cloud Tencent 元数据路由实现个人开发泳道,告别频繁部署
java·spring cloud
wsad05321 天前
CentOS 10 上使用 Docker Compose 部署 Discuz X5.0 论坛完整教程
linux·docker·centos·discuz
砍材农夫1 天前
spring-ai|Spring‑AI 2.0.0 新特性 + 入门教程
spring boot·spring·spring cloud
Java成神之路-2 天前
Spring Cloud 微服务契约先行:为什么 Controller 建议要实现 Feign 接口?
spring·spring cloud·微服务
vx-程序开发3 天前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
檀越剑指大厂4 天前
CentOS部署Landlord斗地主项目:源码编译并实现远程访问
linux·运维·centos
测试运维日常笔记5 天前
RHEL/CentOS 离线部署指南:配置本地 ISO 镜像作为 YUM 仓库
linux·运维·centos