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 日志效果
相关推荐
重生之我是Java开发战士12 小时前
【Spring Cloud】Nacos注册中心
后端·spring·spring cloud
码外生活20 小时前
🎥 手搓一套直播高并发环境!一个后端小白从 0 到 1 的搭建笔记
后端·spring cloud
Meta3921 小时前
cenots8安装docker
docker·容器·centos
持敬chijing2 天前
CentOS 从零搭建 LAMP 环境完整实战指南
linux·运维·web安全·网络安全·centos
Merlyj2 天前
华为 ASG Manager 镜像日志接收链路故障排查流程
centos·asg
张宇Joaquin2 天前
S920X00机器CentOS 7.6下大批量容器执行docker exec卡顿
linux·docker·centos
行百里er3 天前
Spring Insight 里上报 Span 为什么用 JDK HttpClient 而不是 RestTemplate
spring boot·spring cloud·监控
陈皮波比茶3 天前
SpringCloudAlibaba
java·spring cloud·微服务
欢迎来到祖安!3 天前
企业微信 API 接口能力介绍:支持消息收发、图片发送、表情互动、联系人管理等多场景应用
java·前端·数据仓库·spring cloud·企业微信
行百里er4 天前
BlockingQueue:异步批量上报
spring boot·spring cloud·监控