skywalking镜像应用springboot的例子

目录

1、skywalking-ui连接skywalking-oap服务失败问题

[2、k8s环境 检查skywalking-oap服务状态](#2、k8s环境 检查skywalking-oap服务状态)

[3、本地iidea启动服务连接skywalking oap服务](#3、本地iidea启动服务连接skywalking oap服务)

4、基于apache-skywalking-java-agent-9.4.0.tgz构建skywalking-agent镜像

4.1、Dockerfile内容如下

[4.2、AbstractBuilder.METER_SERVICE" is null报错](#4.2、AbstractBuilder.METER_SERVICE" is null报错)

4.3、应用的Dockerfile

5、spring-boo-adming使用skywalking-agent的yaml

6、MySQL数据库

7、Elasticsearch

8、Kibana

9、nacos

10、skywalking-oap

11、skywalking-ui

12、运行效果


1、skywalking-ui连接skywalking-oap服务失败问题

报下面的错误,skywalking-ui.yml执行启动报错,连接skywalking-oap的地址必须加上http或者https协议的前缀,否则报错

2025-07-12 03:09:11,602 com.linecorp.armeria.common.util.SystemInfo 525 [main] INFO [] - IPv6: disabled (no IPv6 network interface)

Exception in thread "main" java.lang.NullPointerException: authority

at java.base/java.util.Objects.requireNonNull(Unknown Source)

at com.linecorp.armeria.client.Endpoint.parse(Endpoint.java:97)

at java.base/java.util.stream.ReferencePipeline31.accept(Unknown Source)

at java.base/java.util.stream.ReferencePipeline31.accept(Unknown Source)

at java.base/java.util.stream.ReferencePipeline31.accept(Unknown Source)

at java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Unknown Source)

at java.base/java.util.stream.AbstractPipeline.copyInto(Unknown Source)

at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source)

at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(Unknown Source)

at java.base/java.util.stream.AbstractPipeline.evaluate(Unknown Source)

at java.base/java.util.stream.ReferencePipeline.collect(Unknown Source)

at org.apache.skywalking.oap.server.webapp.OapProxyService.<init>(OapProxyService.java:50)

at org.apache.skywalking.oap.server.webapp.ApplicationStartUp.main(ApplicationStartUp.java:69)

2、k8s环境 检查skywalking-oap服务状态

检查 OAP 服务是否存在

kubectl get svc skywalking-oap -n default

测试 OAP 连通性(在集群内部)

kubectl run test-pod --rm -it --image=curlimages/curl -- sh

curl -X POST http://skywalking-oap:12800/graphql -H "Content-Type: application/json" -d '{"query": "query { status }"}'

3、本地iidea启动服务连接skywalking oap服务

复制代码
"D:\Program Files\Java\jdk-17\bin\java" -javaagent:J:\my-example\nacos3.0.1-spring-boot-app\skywalking-agent\skywalking-agent.jar -DSW_AGENT_NAME=spring-boot-admin -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=10.10.10.99:32662 -Dloader.path=config,lib -jar spring-boot-admin.jar

4、基于apache-skywalking-java-agent-9.4.0.tgz构建skywalking-agent镜像

4.1、Dockerfile内容如下

FROM centos:7.9.2009

USER root

定义 Arthas 目录环境变量

ENV ARTHAS_HOME=/opt/arthas

更改 YUM 源并清理缓存

RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak && \

rm -rf /etc/yum.repos.d/* && \

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo && \

sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo && \

yum clean all && yum makecache fast && yum update -y && \

yum install -y \

gcc gcc-c++ kernel-devel yum-utils device-mapper-persistent-data lvm2 \

tcpdump vim git wget net-tools libpcap libpcap-devel automake make \

pam-devel openldap-devel cyrus-sasl-devel openssl-devel telnet rsync \

bzip2 iptables lsof curl su-exec expect net-tools \

gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel \

libpng-devel openssl-devel bison flex \

glibc-devel libstdc++ && \

yum clean all && rm -rf /var/cache/yum/*

设置时区

RUN rm -f /etc/localtime && \

ln -sv /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \

echo "Asia/Shanghai" > /etc/timezone && \

echo "TZ=Asia/Shanghai" >> /etc/profile

安装 JDK 17

COPY jdk-17.0.14_linux-x64_bin.rpm /home/

RUN rpm -ivh --nodeps /home/jdk-17.0.14_linux-x64_bin.rpm && \

rm -f /home/jdk-17.0.14_linux-x64_bin.rpm && \

echo "export JAVA_HOME=/usr/java/jdk-17" >> /etc/profile && \

echo "export CLASSPATH=.:\$JAVA_HOME/lib" >> /etc/profile && \

echo "export PATH=\PATH:\\JAVA_HOME/bin" >> /etc/profile && \

source /etc/profile

COPY arthas-bin /opt/arthas/

ENV ARTHAS_HOME=/opt/arthas

赋予可执行权限

RUN chmod +x $ARTHAS_HOME/*

安装 Arthas(修正版本和链接)

#RUN mkdir -p ARTHAS_HOME \&\& wget -O ARTHAS_HOME/arthas-boot.jar https://repo1.maven.org/maven2/com/aliyun/arthas/arthas-boot/3.7.8/arthas-boot-3.7.8.jar && echo "alias arthas='java -jar $ARTHAS_HOME/arthas-boot.jar'" >> /etc/profile

处理 SkyWalking Agent

处理 SkyWalking Agent(修复目录不存在问题)

RUN mkdir -p /usr/skywalking/agent # 提前创建上级目录

ADD skywalking-agent /tmp/skywalking-agent

验证解压后的目录名称,若正确则继续移动

RUN if [ -d "/tmp/skywalking-agent" ]; then \

mv /tmp/skywalking-agent/* /usr/skywalking/agent && \

ls /usr/skywalking/agent/ && \

#cp -r /usr/skywalking/agent/optional-plugins/* /usr/skywalking/agent/plugins/ && \

#cp -r /usr/skywalking/agent/optional-reporter-plugins/* /usr/skywalking/agent/plugins/ && \

rm -rf /tmp/*; \

else \

echo "Error: /tmp/skywalking-agent not found"; \

exit 1; \

fi

系统配置(最终修复 exit code:1 问题)

RUN set -ex && \

安装必要组件:SELinux 工具、iptables 基础命令

yum install -y selinux-policy-targeted policycoreutils iptables && \

修改 SELinux 配置文件为 disabled

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config && \

优化 SELinux 状态判断语法(添加括号确保优先级)

if (sestatus 2>/dev/null || true) | grep -q "SELinux status:.*enabled"; then \

容错处理:即使 setenforce 失败(如 SELinux 已禁用),也不终止步骤

setenforce 0 || true; \

else \

echo "SELinux is already disabled, skipping setenforce"; \

fi && \

确保 iptables 命令存在后清理规则,容错执行失败

if [ -x "$(command -v iptables)" ]; then \

iptables -F && iptables -X || true; \

else \

echo "iptables command not found, skipping cleanup"; \

fi && \

清理 yum 缓存

yum clean all

环境变量

ENV LANG=C.UTF-8 \

TZ=Asia/Shanghai \

MYPATH=/ \

JAVA_HOME=/usr/java/jdk-17 \

PATH=$PATH:/usr/java/jdk-17/bin

处理入口脚本

COPY docker-entrypoint.sh /usr/local/bin/

RUN chmod +x /usr/local/bin/docker-entrypoint.sh

WORKDIR $MYPATH

EXPOSE 22 8080 8888 8563 3568 6123 6122 6124 8081 443

MAINTAINER app

ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]

4.2、AbstractBuilder.METER_SERVICE" is null报错

报错内容

Exception in thread "Thread-1" java.lang.NullPointerException: Cannot invoke "org.apache.skywalking.apm.agent.core.meter.MeterService.register(org.apache.skywalking.apm.agent.core.meter.BaseMeter)" because "org.apache.skywalking.apm.agent.core.meter.AbstractBuilder.METER_SERVICE" is null

描述:上面构建镜像,执行下面的命令,在k8s环境运行会出现错误

cp -r /usr/skywalking/agent/optional-plugins/* /usr/skywalking/agent/plugins/ && \

cp -r /usr/skywalking/agent/optional-reporter-plugins/* /usr/skywalking/agent/plugins/

所以构建镜像的时候,把这两个注释了。

github上的issue

[Bug] skywalking swck inject bug · apache/skywalking · Discussion #13241

4.3、应用的Dockerfile

AdoptOpenJDK 停止发布 OpenJDK 二进制,而 Eclipse Temurin 是它的延伸,提供更好的稳定性

FROM openjdk:17-jdk-oracle

创建目录,并使用它作为工作目录

RUN mkdir -p /opt/spring-boot-admin/

WORKDIR /opt/spring-boot-admin/

COPY /target/lib /opt/spring-boot-admin/lib

COPY /target/config /opt/spring-boot-admin/config

COPY /target/spring-boot-admin.jar /opt/spring-boot-admin/spring-boot-admin.jar

设置 TZ 时区

设置 JAVA_OPTS 环境变量,可通过 docker run -e "JAVA_OPTS=" 进行覆盖

ENV TZ=Asia/Shanghai

暴露后端项目的 8080 端口

EXPOSE 8080 9527

ENV JAVA_OPT="-Xms1024m -Xmx1024m -Xss1m -Xshare:off -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5555 -XX:ReservedCodeCacheSize=50m -XX:+TieredCompilation -XX:TieredStopAtLevel=1 -XX:MaxDirectMemorySize=100m"

ENTRYPOINT exec java $JAVA_OPT -Dloader.path=/opt/spring-boot-admin/config,/opt/spring-boot-admin/lib -jar /opt/spring-boot-admin/spring-boot-admin.jar

5、spring-boo-adming使用skywalking-agent的yaml

apiVersion: apps/v1

kind: Deployment

metadata:

name: spring-boot-admin

namespace: default

labels:

app: spring-boot-admin

spec:

replicas: 1

selector:

matchLabels:

app: spring-boot-admin

template:

metadata:

labels:

app: spring-boot-admin

spec:

initContainers:

  • name: skywalking-agent

image: skywalking-agent:2.0

imagePullPolicy: IfNotPresent

workingDir: /

command: ["sh"]

args:

"-c", "mkdir -p /skywalking/agent \&\& cp -r /usr/skywalking/agent/\* /skywalking/agent",

volumeMounts:

  • name: skywalking-agent

mountPath: /skywalking/agent

containers:

  • name: spring-boot-admin

image: spring-boot-admin

imagePullPolicy: IfNotPresent

env:

  • name: JAVA_TOOL_OPTIONS

value: -javaagent:/usr/skywalking/agent/skywalking-agent.jar

  • name: SW_AGENT_NAME

value: spring-boot-admin

  • name: SW_LOGGING_LEVEL

value: DEBUG

  • name: SW_AGENT_COLLECTOR_BACKEND_SERVICES

value: skywalking-oap.default.svc.cluster.local:11800

  • name: SW_METER_ACTIVE

value: "false"

  • name: SERVER_PORT

value: "8080"

  • name: "JAVA_OPT"

value: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=9527"

resources:

limits:

memory: "2Gi"

requests:

memory: "1Gi"

ports:

  • name: http

containerPort: 8080

protocol: TCP

  • name: debug

containerPort: 9527

protocol: TCP

volumeMounts:

  • name: date

mountPath: /etc/localtime

  • name: skywalking-agent

mountPath: /usr/skywalking/agent

volumes:

  • name: date

hostPath:

path: /etc/localtime

  • name: skywalking-agent

emptyDir: {}


apiVersion: v1

kind: Service

metadata:

name: spring-boot-admin

namespace: default

labels:

app: spring-boot-admin

spec:

type: NodePort

ports:

  • name: http

port: 8080

targetPort: 8080

nodePort: 30315

  • name: debug

port: 9527

targetPort: 9527

nodePort: 30316

selector:

app: spring-boot-admin

6、MySQL数据库

======================

MySQL 初始化配置 (修复公钥检索和用户权限)

======================

apiVersion: v1

kind: ConfigMap

metadata:

name: mysql-initdb-config

namespace: default

data:

01-change-auth.sql: |

-- 确保 root 用户存在并设置正确密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';

-- 创建/更新 root 用户允许从任何主机访问

CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED WITH mysql_native_password BY '${MYSQL_ROOT_PASSWORD}';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

-- 刷新权限使更改生效

FLUSH PRIVILEGES;


======================

MySQL 主配置 (修复变量名错误)

======================

apiVersion: v1

kind: ConfigMap

metadata:

name: mysql-config

namespace: default

data:

my.cnf: |

mysqld

bind-address = 0.0.0.0

port = 3306

server-id = 1

skip-host-cache

skip-name-resolve

skip_name_resolve = ON

datadir = /var/lib/mysql

socket = /var/run/mysqld/mysqld.sock

pid-file = /var/run/mysqld/mysqld.pid

secure-file-priv = /var/lib/mysql-files

character-set-server = utf8mb4

collation-server = utf8mb4_unicode_ci

init_connect = 'SET NAMES utf8mb4, collation_connection = utf8mb4_unicode_ci'

default-time-zone = '+8:00'

skip-character-set-client-handshake

log_bin = mysql-bin

binlog_format = ROW

expire_logs_days = 7

max_binlog_size = 100M

max_connections = 500

max_connect_errors = 1000

wait_timeout = 300

innodb_buffer_pool_size = 4G

innodb_log_file_size = 1G

innodb_flush_log_at_trx_commit = 1

local_infile = OFF

关键:使用正确的变量名设置认证插件

default_authentication_plugin = mysql_native_password

client

socket = /var/run/mysqld/mysqld.sock

default-character-set = utf8mb4

mysql

default-character-set = utf8mb4


======================

MySQL Secret 配置 (确保密码正确)

======================

apiVersion: v1

kind: Secret

metadata:

name: mysql-secret

namespace: default

type: Opaque

data:

确认密码是 "123456" 的 base64 编码

root-password: MTIzNDU2 # echo -n '123456' | base64


======================

MySQL 持久卷声明

======================

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

name: mysql-pvc

namespace: default

labels:

app: mysql

spec:

accessModes:

  • ReadWriteOnce

resources:

requests:

storage: 160Gi

storageClassName: nfs-client


======================

MySQL 服务

======================

apiVersion: v1

kind: Service

metadata:

name: mysql

namespace: default

spec:

selector:

app: mysql

type: ClusterIP

ports:

  • name: mysql

protocol: TCP

port: 3306

targetPort: 3306


======================

MySQL 部署 (完整修复)

======================

apiVersion: apps/v1

kind: Deployment

metadata:

name: mysql

namespace: default

spec:

selector:

matchLabels:

app: mysql

replicas: 1

strategy:

type: Recreate

template:

metadata:

labels:

app: mysql

spec:

安全上下文

securityContext:

runAsUser: 999

fsGroup: 999

runAsNonRoot: true

存储卷

volumes:

  • name: mysql-data

persistentVolumeClaim:

claimName: mysql-pvc

  • name: mysql-config

configMap:

name: mysql-config

items:

  • key: my.cnf

path: my.cnf

  • name: initdb

configMap:

name: mysql-initdb-config

主容器

containers:

  • name: mysql

image: mysql:8.0.33

imagePullPolicy: IfNotPresent

args:

  • "--defaults-file=/etc/mysql/my.cnf"

  • "--character-set-server=utf8mb4"

  • "--collation-server=utf8mb4_unicode_ci"

  • "--default-authentication-plugin=mysql_native_password" # 强制使用旧版认证

ports:

  • containerPort: 3306

name: mysql

env:

  • name: MYSQL_ROOT_PASSWORD

valueFrom:

secretKeyRef:

name: mysql-secret

key: root-password

  • name: TZ

value: Asia/Shanghai

  • name: MYSQL_ROOT_HOST

value: "%" # 允许所有主机连接

volumeMounts:

  • name: mysql-data

mountPath: /var/lib/mysql

  • name: mysql-config

mountPath: /etc/mysql/my.cnf

subPath: my.cnf

  • name: initdb

mountPath: /docker-entrypoint-initdb.d

添加启动前命令创建sock文件目录

lifecycle:

postStart:

exec:

command:

  • "/bin/sh"

  • "-c"

  • |

mkdir -p /var/run/mysqld

chown -R mysql:mysql /var/run/mysqld

chmod 777 /var/run/mysqld

livenessProbe:

exec:

command:

  • mysqladmin

  • ping

  • "-uroot"

  • "-p$(MYSQL_ROOT_PASSWORD)"

  • "--protocol=socket"

initialDelaySeconds: 90 # 增加延迟确保MySQL完全启动

periodSeconds: 20

timeoutSeconds: 10

readinessProbe:

exec:

command:

  • mysqladmin

  • ping

  • "-uroot"

  • "-p$(MYSQL_ROOT_PASSWORD)"

  • "--protocol=socket"

initialDelaySeconds: 60

periodSeconds: 15

timeoutSeconds: 5

resources:

requests:

memory: "4Gi"

cpu: "1000m"

limits:

memory: "8Gi"

cpu: "2000m"

securityContext:

allowPrivilegeEscalation: false

readOnlyRootFilesystem: false

7、Elasticsearch

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: es7-cluster

namespace: default

spec:

serviceName: elasticsearch7

replicas: 1

selector:

matchLabels:

app: elasticsearch7

template:

metadata:

labels:

app: elasticsearch7

spec:

containers:

  • name: elasticsearch7

image: elasticsearch:7.16.2

imagePullPolicy: IfNotPresent

resources:

limits:

cpu: 1000m

requests:

cpu: 100m

ports:

  • containerPort: 9200

name: rest

protocol: TCP

  • containerPort: 9300

name: inter-node

protocol: TCP

volumeMounts:

  • name: data

mountPath: /usr/share/elasticsearch/data

env:

value: k8s-es

valueFrom:

fieldRef:

fieldPath: metadata.name

  • name: discovery.zen.minimum_master_nodes

value: "1"

  • name: discovery.seed_hosts

value: "es7-cluster-0.elasticsearch7"

  • name: cluster.initial_master_nodes

value: "es7-cluster-0"

  • name: ES_JAVA_OPTS

value: "-Xms1g -Xmx1g"

initContainers:

  • name: fix-permissions

image: busybox

imagePullPolicy: IfNotPresent

command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]

securityContext:

privileged: true

volumeMounts:

  • name: data

mountPath: /usr/share/elasticsearch/data

  • name: increase-vm-max-map

image: busybox

imagePullPolicy: IfNotPresent

command: ["sysctl", "-w", "vm.max_map_count=262144"]

securityContext:

privileged: true

  • name: increase-fd-ulimit

image: busybox

imagePullPolicy: IfNotPresent

command: ["sh", "-c", "ulimit -n 65536"]

volumeClaimTemplates:

  • metadata:

name: data

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: "nfs-client"

resources:

requests:

storage: 200Gi


apiVersion: v1

kind: Service

metadata:

name: elasticsearch7

namespace: default

spec:

selector:

app: elasticsearch7

type: NodePort

ports:

  • port: 9200

nodePort: 30002

targetPort: 9200

8、Kibana

apiVersion: v1

kind: Service

metadata:

name: kibana

namespace: default

labels:

app: kibana

component: ui

spec:

ports:

  • name: http

port: 5601

targetPort: 5601

nodePort: 30001

type: NodePort

selector:

app: kibana


apiVersion: apps/v1

kind: Deployment

metadata:

name: kibana

namespace: default

labels:

app: kibana

spec:

replicas: 1

selector:

matchLabels:

app: kibana

strategy:

type: Recreate

template:

metadata:

labels:

app: kibana

annotations:

co.elastic.logs/enabled: "true"

spec:

securityContext:

runAsUser: 1000

runAsGroup: 1000

fsGroup: 1000

runAsNonRoot: true

containers:

  • name: kibana

image: kibana:7.16.2

imagePullPolicy: IfNotPresent

resources:

limits:

cpu: "500m"

memory: "1Gi"

requests:

cpu: "200m"

memory: "512Mi"

env:

  • name: ELASTICSEARCH_HOSTS

value: http://elasticsearch7.default.svc.cluster.local:9200

  • name: SERVER_HOST

value: "0.0.0.0"

  • name: I18N_LOCALE

value: "zh-CN"

  • name: SERVER_PUBLICBASEURL

value: "http://localhost:30001"

  • name: NODE_OPTIONS

value: "--max-old-space-size=700"

ports:

  • containerPort: 5601

name: http

livenessProbe:

httpGet:

path: /api/status

port: 5601

initialDelaySeconds: 120

periodSeconds: 30

timeoutSeconds: 5

readinessProbe:

httpGet:

path: /api/status

port: 5601

initialDelaySeconds: 30

periodSeconds: 10

timeoutSeconds: 3

securityContext:

readOnlyRootFilesystem: true # 保持根文件系统只读

allowPrivilegeEscalation: false

capabilities:

drop:

  • ALL

lifecycle:

preStop:

exec:

command: ["/bin/sh", "-c", "sleep 15"]

volumeMounts:

  • name: kibana-data

mountPath: /usr/share/kibana/data # 挂载数据目录

volumes:

  • name: kibana-data

emptyDir: {} # 使用临时存储(生产环境建议使用持久卷)

9、nacos

======================

ConfigMap

======================

apiVersion: v1

kind: ConfigMap

metadata:

name: nacos-cm

namespace: default

data:

application.properties: |

nacos.standalone=true

nacos.core.member.lookup.type=file

nacos.server.main.port=8848

nacos.core.protocol.raft.data.enabled=false

nacos.core.distro.enabled=false

nacos.core.cluster.enabled=false

nacos.core.raft.enabled=false

nacos.naming.data.warmup=true

nacos.naming.data.warmup.delay=0

spring.sql.init.platform=mysql

db.num=1

db.url.0=jdbc:mysql://mysql:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC

db.user=${MYSQL_USER}

db.password=${MYSQL_PASSWORD}

nacos.core.auth.enabled=true

nacos.core.auth.server.identity.key=serverIdentity

nacos.core.auth.server.identity.value=security

nacos.core.auth.plugin.nacos.token.secret.key=${NACOS_AUTH_TOKEN}

nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**

nacos.console.port=12306

nacos.remote.server.grpc.port=9848

nacos.core.protocol.raft.data.port=7848

management.endpoints.web.exposure.include=prometheus

nacos.server.contextPath=/nacos

nacos.console.contextPath=

nacos.console.ui.enabled=true

server.tomcat.accesslog.enabled=true

server.tomcat.accesslog.max-days=30

server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i

nacos-logback.xml: |

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="10 seconds">

<contextName>nacos</contextName>

<property name="LOG_HOME" value="/home/nacos/logs"/>

<property name="APP_NAME" value="nacos"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>

</encoder>

</appender>

<appender name="naming-server" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>${LOG_HOME}/naming-server.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<fileNamePattern>${LOG_HOME}/naming-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>

<maxFileSize>1GB</maxFileSize>

<maxHistory>7</maxHistory>

<totalSizeCap>7GB</totalSizeCap>

</rollingPolicy>

<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>

</encoder>

</appender>

<appender name="config-server" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>${LOG_HOME}/config-server.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<fileNamePattern>${LOG_HOME}/config-server.log.%d{yyyy-MM-dd}.%i</fileNamePattern>

<maxFileSize>1GB</maxFileSize>

<maxHistory>7</maxHistory>

<totalSizeCap>7GB</totalSizeCap>

</rollingPolicy>

<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>

</encoder>

</appender>

<appender name="config-dump" class="ch.qos.logback.core.rolling.RollingFileAppender">

<file>${LOG_HOME}/config-dump.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">

<fileNamePattern>${LOG_HOME}/config-dump.log.%d{yyyy-MM-dd}.%i</fileNamePattern>

<maxFileSize>1GB</maxFileSize>

<maxHistory>7</maxHistory>

<totalSizeCap>7GB</totalSizeCap>

</rollingPolicy>

<encoder>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>

</encoder>

</appender>

<root level="INFO">

<appender-ref ref="CONSOLE"/>

<appender-ref ref="naming-server"/>

<appender-ref ref="config-server"/>

<appender-ref ref="config-dump"/>

</root>

<logger name="com.alibaba.nacos" level="INFO" additivity="false">

<appender-ref ref="CONSOLE"/>

<appender-ref ref="naming-server"/>

<appender-ref ref="config-server"/>

<appender-ref ref="config-dump"/>

</logger>

</configuration>


apiVersion: v1

kind: Secret

metadata:

name: nacos-db-secret

namespace: default

type: Opaque

data:

mysql-user: "cm9vdA=="

mysql-password: "MTIzNDU2"


apiVersion: v1

kind: Secret

metadata:

name: nacos-token-secret

namespace: default

type: Opaque

data:

auth-token: "ZmYxMjM0NTY3ODkwYWFhYmJiY2NjZGRkZWVlZmZmZGRkY2JiYWFiYWExMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTA="


apiVersion: v1

kind: Service

metadata:

name: nacos-headless

namespace: default

labels:

app: nacos

spec:

clusterIP: None

ports:

  • name: http

port: 8848

targetPort: 8848

  • name: rpc

port: 7848

targetPort: 7848

  • name: grpc

port: 9848

targetPort: 9848

  • name: console

port: 12306

targetPort: 12306

selector:

app: nacos


apiVersion: v1

kind: Service

metadata:

name: nacos

namespace: default

labels:

app: nacos

spec:

type: ClusterIP

ports:

  • name: http

port: 8848

targetPort: 8848

  • name: rpc

port: 7848

targetPort: 7848

  • name: grpc

port: 9848

targetPort: 9848

  • name: console

port: 12306

targetPort: 12306

selector:

app: nacos


apiVersion: apps/v1

kind: StatefulSet

metadata:

name: nacos

namespace: default

labels:

app: nacos

spec:

serviceName: nacos-headless

replicas: 1

podManagementPolicy: Parallel

selector:

matchLabels:

app: nacos

template:

metadata:

labels:

app: nacos

annotations:

prometheus.io/scrape: "true"

prometheus.io/port: "8848"

spec:

securityContext:

fsGroup: 1000

containers:

  • name: nacos

image: nacos/nacos-server:v3.0.2

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 8848

name: http

  • containerPort: 7848

name: rpc

  • containerPort: 9848

name: grpc

  • containerPort: 12306

name: console

#resources:

#limits:

#cpu: "1"

#memory: "1.5Gi"

#requests:

#cpu: "500m"

#memory: "1Gi"

env:

  • name: MODE

value: "standalone"

  • name: SERVICE_NAME

value: "nacos-headless"

  • name: SPRING_DATASOURCE_PLATFORM

value: "mysql"

  • name: NACOS_SERVER_PORT

value: "8848"

  • name: NACOS_APPLICATION_PORT

value: "8848"

  • name: PREFER_HOST_MODE

value: "hostname"

  • name: TZ

value: "Asia/Shanghai"

  • name: NACOS_REPLICAS

value: "1"

  • name: MYSQL_USER

valueFrom:

secretKeyRef:

name: nacos-db-secret

key: mysql-user

  • name: MYSQL_PASSWORD

valueFrom:

secretKeyRef:

name: nacos-db-secret

key: mysql-password

  • name: NACOS_AUTH_TOKEN

valueFrom:

secretKeyRef:

name: nacos-token-secret

key: auth-token

  • name: NACOS_SERVER_IP

valueFrom:

fieldRef:

fieldPath: status.podIP

  • name: LOG_HOME

value: "/home/nacos/logs"

  • name: JAVA_OPT

value: "-Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -Dnacos.standalone=true -Dnacos.core.auth.enabled=true -Djava.security.egd=file:/dev/./urandom -Drocksdb.tmp.path=/home/nacos/tmp -Dserver.max-http-header-size=524288 -Dnacos.core.cluster.enabled=false -Dnacos.core.distro.enabled=false -Dnacos.core.raft.enabled=false -Dnacos.core.protocol.raft.data.enabled=false -Dnacos.naming.data.warmup=true"

  • name: NACOS_TMP_DIR

value: "/home/nacos/tmp"

securityContext:

runAsUser: 1000

runAsNonRoot: true

allowPrivilegeEscalation: false

capabilities:

drop: ["ALL"]

lifecycle:

preStop:

exec:

command: ["/bin/sh", "-c", "sleep 30"]

volumeMounts:

  • name: config

mountPath: /home/nacos/conf/application.properties

subPath: application.properties

  • name: config

mountPath: /home/nacos/conf/nacos-logback.xml

subPath: nacos-logback.xml

  • name: data

mountPath: /home/nacos/data

  • name: logs

mountPath: /home/nacos/logs

  • name: rocksdb-tmp

mountPath: /home/nacos/tmp

command: ["/bin/sh", "-c"]

args:

  • |

exec java $JAVA_OPT \

-Xlog:gc*:file=/home/nacos/logs/nacos_gc.log:time,tags:filecount=10,filesize=102400 \

-Dloader.path=/home/nacos/plugins,/home/nacos/plugins/health,/home/nacos/plugins/cmdb,/home/nacos/plugins/selector \

-Dnacos.home=/home/nacos \

-jar /home/nacos/target/nacos-server.jar \

--spring.config.additional-location=file:/home/nacos/conf/ \

--spring.config.name=application \

--logging.config=/home/nacos/conf/nacos-logback.xml

initContainers:

  • name: fix-permissions

image: busybox:1.35

imagePullPolicy: IfNotPresent

command:

  • "/bin/sh"

  • "-c"

  • |

mkdir -p /home/nacos/tmp

chown -R 1000:1000 /home/nacos

chmod 777 /home/nacos/tmp

securityContext:

runAsUser: 0

volumeMounts:

  • name: data

mountPath: /home/nacos/data

  • name: logs

mountPath: /home/nacos/logs

  • name: rocksdb-tmp

mountPath: /home/nacos/tmp

volumes:

  • name: config

configMap:

name: nacos-cm

items:

  • key: application.properties

path: application.properties

  • key: nacos-logback.xml

path: nacos-logback.xml

  • name: rocksdb-tmp

emptyDir: {}

volumeClaimTemplates:

  • metadata:

name: data

labels:

type: nacos-data

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: "nfs-client"

resources:

requests:

storage: 5Gi

  • metadata:

name: logs

labels:

type: nacos-logs

spec:

accessModes: [ "ReadWriteOnce" ]

storageClassName: "nfs-client"

resources:

requests:

storage: 5Gi

10、skywalking-oap

apiVersion: v1

kind: ServiceAccount

metadata:

name: skywalking-oap

namespace: default


kind: Role

apiVersion: rbac.authorization.k8s.io/v1

metadata:

namespace: default

name: skywalking-oap

rules:

  • apiGroups: [""]

resources: ["pods"]

verbs: ["get", "watch", "list"]


apiVersion: rbac.authorization.k8s.io/v1

kind: RoleBinding

metadata:

name: skywalking-oap

namespace: default

roleRef:

apiGroup: rbac.authorization.k8s.io

kind: Role

name: skywalking-oap

subjects:

  • kind: ServiceAccount

name: skywalking-oap

namespace: default


apiVersion: v1

kind: ConfigMap

metadata:

name: oap-config

namespace: default

data:

application.yml: |

cluster:

selector: ${SW_CLUSTER:standalone}

standalone:

zookeeper:

namespace: ${SW_NAMESPACE:""}

hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}

baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries

maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry

enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default

schema: ${SW_ZK_SCHEMA:digest} # only support digest schema

expression: ${SW_ZK_EXPRESSION:skywalking:skywalking}

internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}

internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}

kubernetes:

namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}

labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}

uidEnvName: ${SW_CLUSTER_K8S_UID:SKYWALKING_COLLECTOR_UID}

consul:

serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}

hostPort: ${SW_CLUSTER_CONSUL_HOST_PORT:localhost:8500}

aclToken: ${SW_CLUSTER_CONSUL_ACLTOKEN:""}

internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}

internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}

etcd:

endpoints: ${SW_CLUSTER_ETCD_ENDPOINTS:localhost:2379}

namespace: ${SW_CLUSTER_ETCD_NAMESPACE:/skywalking}

serviceName: ${SW_CLUSTER_ETCD_SERVICE_NAME:"SkyWalking_OAP_Cluster"}

authentication: ${SW_CLUSTER_ETCD_AUTHENTICATION:false}

user: ${SW_CLUSTER_ETCD_USER:}

password: ${SW_CLUSTER_ETCD_PASSWORD:}

internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}

internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}

nacos:

serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}

hostPort: ${SW_CLUSTER_NACOS_HOST_PORT:localhost:8848}

namespace: ${SW_CLUSTER_NACOS_NAMESPACE:"public"}

contextPath: ${SW_CLUSTER_NACOS_CONTEXT_PATH:""}

username: ${SW_CLUSTER_NACOS_USERNAME:""}

password: ${SW_CLUSTER_NACOS_PASSWORD:""}

Nacos auth accessKey

accessKey: ${SW_CLUSTER_NACOS_ACCESSKEY:""}

secretKey: ${SW_CLUSTER_NACOS_SECRETKEY:""}

internalComHost: ${SW_CLUSTER_INTERNAL_COM_HOST:""}

internalComPort: ${SW_CLUSTER_INTERNAL_COM_PORT:-1}

core:

selector: ${SW_CORE:default}

default:

Mixed: Receive agent data, Level 1 aggregate, Level 2 aggregate

Receiver: Receive agent data, Level 1 aggregate

Aggregator: Level 2 aggregate

role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator

restHost: ${SW_CORE_REST_HOST:0.0.0.0}

restPort: ${SW_CORE_REST_PORT:12800}

restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}

restMaxThreads: ${SW_CORE_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_CORE_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_CORE_REST_QUEUE_SIZE:0}

httpMaxRequestHeaderSize: ${SW_CORE_HTTP_MAX_REQUEST_HEADER_SIZE:8192}

gRPCHost: ${SW_CORE_GRPC_HOST:0.0.0.0}

gRPCPort: ${SW_CORE_GRPC_PORT:11800}

maxConcurrentCallsPerConnection: ${SW_CORE_GRPC_MAX_CONCURRENT_CALL:0}

maxMessageSize: ${SW_CORE_GRPC_MAX_MESSAGE_SIZE:52428800} #50MB

gRPCThreadPoolSize: ${SW_CORE_GRPC_THREAD_POOL_SIZE:-1}

gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:false}

gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:""}

gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:""}

gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:""}

downsampling:

  • Hour

  • Day

Set a timeout on metrics data. After the timeout has expired, the metrics data will automatically be deleted.

enableDataKeeperExecutor: ${SW_CORE_ENABLE_DATA_KEEPER_EXECUTOR:true} # Turn it off then automatically metrics data delete will be close.

dataKeeperExecutePeriod: ${SW_CORE_DATA_KEEPER_EXECUTE_PERIOD:5} # How often the data keeper executor runs periodically, unit is minute

recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:3} # Unit is day

metricsDataTTL: ${SW_CORE_METRICS_DATA_TTL:7} # Unit is day

The period of L1 aggregation flush to L2 aggregation. Unit is ms.

l1FlushPeriod: ${SW_CORE_L1_AGGREGATION_FLUSH_PERIOD:500}

The threshold of session time. Unit is ms. Default value is 70s.

storageSessionTimeout: ${SW_CORE_STORAGE_SESSION_TIMEOUT:70000}

The period of doing data persistence. Unit is second.Default value is 25s

persistentPeriod: ${SW_CORE_PERSISTENT_PERIOD:25}

topNReportPeriod: ${SW_CORE_TOPN_REPORT_PERIOD:10} # top_n record worker report cycle, unit is minute

Extra model column are the column defined by in the codes, These columns of model are not required logically in aggregation or further query,

and it will cause more load for memory, network of OAP and storage.

But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party tool, such as Kibana->ES, to query the data by themselves.

activeExtraModelColumns: ${SW_CORE_ACTIVE_EXTRA_MODEL_COLUMNS:false}

The max length of service + instance names should be less than 200

serviceNameMaxLength: ${SW_SERVICE_NAME_MAX_LENGTH:70}

The period(in seconds) of refreshing the service cache. Default value is 10s.

serviceCacheRefreshInterval: ${SW_SERVICE_CACHE_REFRESH_INTERVAL:10}

instanceNameMaxLength: ${SW_INSTANCE_NAME_MAX_LENGTH:70}

The max length of service + endpoint names should be less than 240

endpointNameMaxLength: ${SW_ENDPOINT_NAME_MAX_LENGTH:150}

Define the set of span tag keys, which should be searchable through the GraphQL.

The max length of key=value should be less than 256 or will be dropped.

searchableTracesTags: ${SW_SEARCHABLE_TAG_KEYS:http.method,http.status_code,rpc.status_code,db.type,db.instance,mq.queue,mq.topic,mq.broker}

Define the set of log tag keys, which should be searchable through the GraphQL.

The max length of key=value should be less than 256 or will be dropped.

searchableLogsTags: ${SW_SEARCHABLE_LOGS_TAG_KEYS:level,http.status_code}

Define the set of alarm tag keys, which should be searchable through the GraphQL.

The max length of key=value should be less than 256 or will be dropped.

searchableAlarmTags: ${SW_SEARCHABLE_ALARM_TAG_KEYS:level}

The max size of tags keys for autocomplete select.

autocompleteTagKeysQueryMaxSize: ${SW_AUTOCOMPLETE_TAG_KEYS_QUERY_MAX_SIZE:100}

The max size of tags values for autocomplete select.

autocompleteTagValuesQueryMaxSize: ${SW_AUTOCOMPLETE_TAG_VALUES_QUERY_MAX_SIZE:100}

The number of threads used to prepare metrics data to the storage.

prepareThreads: ${SW_CORE_PREPARE_THREADS:2}

Turn it on then automatically grouping endpoint by the given OpenAPI definitions.

enableEndpointNameGroupingByOpenapi: ${SW_CORE_ENABLE_ENDPOINT_NAME_GROUPING_BY_OPENAPI:true}

The period of HTTP URI pattern recognition. Unit is second.

syncPeriodHttpUriRecognitionPattern: ${SW_CORE_SYNC_PERIOD_HTTP_URI_RECOGNITION_PATTERN:10}

The training period of HTTP URI pattern recognition. Unit is second.

trainingPeriodHttpUriRecognitionPattern: ${SW_CORE_TRAINING_PERIOD_HTTP_URI_RECOGNITION_PATTERN:60}

The max number of HTTP URIs per service for further URI pattern recognition.

maxHttpUrisNumberPerService: ${SW_CORE_MAX_HTTP_URIS_NUMBER_PER_SVR:3000}

If disable the hierarchy, the service and instance hierarchy relation will not be built. And the query of hierarchy will return empty result.

All the hierarchy relations are defined in the `hierarchy-definition.yml`.

Notice: some of the configurations only available for kubernetes environments.

enableHierarchy: ${SW_CORE_ENABLE_HIERARCHY:true}

The int value of the max heap memory usage percent. The default value is 96%.

maxHeapMemoryUsagePercent: ${SW_CORE_MAX_HEAP_MEMORY_USAGE_PERCENT:96}

The long value of the max direct memory usage. The default max value is -1, representing no limit. The unit is in bytes.

maxDirectMemoryUsage: ${SW_CORE_MAX_DIRECT_MEMORY_USAGE:-1}

storage:

selector: ${SW_STORAGE:banyandb}

banyandb:

Since 10.2.0, the banyandb configuration is separated to an independent configuration file: `bydb.yaml`.

elasticsearch:

namespace: ${SW_NAMESPACE:""}

clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}

protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}

connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000}

socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000}

responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000}

numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0}

user: ${SW_ES_USER:""}

password: ${SW_ES_PASSWORD:""}

trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""}

trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}

secretsManagementFile: ${SW_ES_SECRETS_MANAGEMENT_FILE:""} # Secrets management file in the properties format includes the username, password, which are managed by 3rd party tool.

dayStep: ${SW_STORAGE_DAY_STEP:1} # Represent the number of days in the one minute/hour/day index.

indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:1} # Shard number of new indexes

indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:1} # Replicas number of new indexes

Specify the settings for each index individually.

If configured, this setting has the highest priority and overrides the generic settings.

specificIndexSettings: ${SW_STORAGE_ES_SPECIFIC_INDEX_SETTINGS:""}

Super data set has been defined in the codes, such as trace segments.The following 3 config would be improve es performance when storage super size data in es.

superDatasetDayStep: ${SW_STORAGE_ES_SUPER_DATASET_DAY_STEP:-1} # Represent the number of days in the super size dataset record index, the default value is the same as dayStep when the value is less than 0

superDatasetIndexShardsFactor: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_SHARDS_FACTOR:5} # This factor provides more shards for the super data set, shards number = indexShardsNumber * superDatasetIndexShardsFactor. Also, this factor effects Zipkin traces.

superDatasetIndexReplicasNumber: ${SW_STORAGE_ES_SUPER_DATASET_INDEX_REPLICAS_NUMBER:0} # Represent the replicas number in the super size dataset record index, the default value is 0.

indexTemplateOrder: ${SW_STORAGE_ES_INDEX_TEMPLATE_ORDER:0} # the order of index template

bulkActions: {SW_STORAGE_ES_BULK_ACTIONS:5000} # Execute the async bulk record data every {SW_STORAGE_ES_BULK_ACTIONS} requests

batchOfBytes: ${SW_STORAGE_ES_BATCH_OF_BYTES:10485760} # A threshold to control the max body size of ElasticSearch Bulk flush.

flush the bulk every 5 seconds whatever the number of requests

flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:5}

concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests

resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}

metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:10000}

scrollingBatchSize: ${SW_STORAGE_ES_SCROLLING_BATCH_SIZE:5000}

segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}

profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}

asyncProfilerTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_ASYNC_PROFILER_TASK_SIZE:200}

profileDataQueryBatchSize: ${SW_STORAGE_ES_QUERY_PROFILE_DATA_BATCH_SIZE:100}

oapAnalyzer: ${SW_STORAGE_ES_OAP_ANALYZER:"{\"analyzer\":{\"oap_analyzer\":{\"type\":\"stop\"}}}"} # the oap analyzer.

oapLogAnalyzer: ${SW_STORAGE_ES_OAP_LOG_ANALYZER:"{\"analyzer\":{\"oap_log_analyzer\":{\"type\":\"standard\"}}}"} # the oap log analyzer. It could be customized by the ES analyzer configuration to support more language log formats, such as Chinese log, Japanese log and etc.

advanced: ${SW_STORAGE_ES_ADVANCED:""}

Enable shard metrics and records indices into multi-physical indices, one index template per metric/meter aggregation function or record.

logicSharding: ${SW_STORAGE_ES_LOGIC_SHARDING:false}

Custom routing can reduce the impact of searches. Instead of having to fan out a search request to all the shards in an index, the request can be sent to just the shard that matches the specific routing value (or values).

enableCustomRouting: ${SW_STORAGE_ES_ENABLE_CUSTOM_ROUTING:false}

mysql:

properties:

jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest?rewriteBatchedStatements=true&allowMultiQueries=true"}

dataSource.user: ${SW_DATA_SOURCE_USER:root}

dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root@1234}

dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}

dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}

dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}

dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}

metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}

maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}

asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}

postgresql:

properties:

jdbcUrl: ${SW_JDBC_URL:"jdbc:postgresql://localhost:5432/skywalking"}

dataSource.user: ${SW_DATA_SOURCE_USER:postgres}

dataSource.password: ${SW_DATA_SOURCE_PASSWORD:123456}

dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}

dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}

dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}

dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}

metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}

maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}

asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}

agent-analyzer:

selector: ${SW_AGENT_ANALYZER:default}

default:

The default sampling rate and the default trace latency time configured by the 'traceSamplingPolicySettingsFile' file.

traceSamplingPolicySettingsFile: ${SW_TRACE_SAMPLING_POLICY_SETTINGS_FILE:trace-sampling-policy-settings.yml}

slowDBAccessThreshold: ${SW_SLOW_DB_THRESHOLD:default:200,mongodb:100} # The slow database access thresholds. Unit ms.

forceSampleErrorSegment: ${SW_FORCE_SAMPLE_ERROR_SEGMENT:true} # When sampling mechanism active, this config can open(true) force save some error segment. true is default.

segmentStatusAnalysisStrategy: ${SW_SEGMENT_STATUS_ANALYSIS_STRATEGY:FROM_SPAN_STATUS} # Determine the final segment status from the status of spans. Available values are `FROM_SPAN_STATUS` , `FROM_ENTRY_SPAN` and `FROM_FIRST_SPAN`. `FROM_SPAN_STATUS` represents the segment status would be error if any span is in error status. `FROM_ENTRY_SPAN` means the segment status would be determined by the status of entry spans only. `FROM_FIRST_SPAN` means the segment status would be determined by the status of the first span only.

Nginx and Envoy agents can't get the real remote address.

Exit spans with the component in the list would not generate the client-side instance relation metrics.

noUpstreamRealAddressAgents: ${SW_NO_UPSTREAM_REAL_ADDRESS:6000,9000}

meterAnalyzerActiveFiles: ${SW_METER_ANALYZER_ACTIVE_FILES:datasource,threadpool,satellite,go-runtime,python-runtime,continuous-profiling,java-agent,go-agent} # Which files could be meter analyzed, files split by ","

slowCacheReadThreshold: ${SW_SLOW_CACHE_SLOW_READ_THRESHOLD:default:20,redis:10} # The slow cache read operation thresholds. Unit ms.

slowCacheWriteThreshold: ${SW_SLOW_CACHE_SLOW_WRITE_THRESHOLD:default:20,redis:10} # The slow cache write operation thresholds. Unit ms.

log-analyzer:

selector: ${SW_LOG_ANALYZER:default}

default:

lalFiles: ${SW_LOG_LAL_FILES:envoy-als,mesh-dp,mysql-slowsql,pgsql-slowsql,redis-slowsql,k8s-service,nginx,default}

malFiles: ${SW_LOG_MAL_FILES:"nginx"}

event-analyzer:

selector: ${SW_EVENT_ANALYZER:default}

default:

receiver-sharing-server:

selector: ${SW_RECEIVER_SHARING_SERVER:default}

default:

For HTTP server

restHost: ${SW_RECEIVER_SHARING_REST_HOST:0.0.0.0}

restPort: ${SW_RECEIVER_SHARING_REST_PORT:0}

restContextPath: ${SW_RECEIVER_SHARING_REST_CONTEXT_PATH:/}

restMaxThreads: ${SW_RECEIVER_SHARING_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_RECEIVER_SHARING_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_RECEIVER_SHARING_REST_QUEUE_SIZE:0}

httpMaxRequestHeaderSize: ${SW_RECEIVER_SHARING_HTTP_MAX_REQUEST_HEADER_SIZE:8192}

For gRPC server

gRPCHost: ${SW_RECEIVER_GRPC_HOST:0.0.0.0}

gRPCPort: ${SW_RECEIVER_GRPC_PORT:0}

maxConcurrentCallsPerConnection: ${SW_RECEIVER_GRPC_MAX_CONCURRENT_CALL:0}

maxMessageSize: ${SW_RECEIVER_GRPC_MAX_MESSAGE_SIZE:52428800} #50MB

gRPCThreadPoolSize: ${SW_RECEIVER_GRPC_THREAD_POOL_SIZE:0}

gRPCSslEnabled: ${SW_RECEIVER_GRPC_SSL_ENABLED:false}

gRPCSslKeyPath: ${SW_RECEIVER_GRPC_SSL_KEY_PATH:""}

gRPCSslCertChainPath: ${SW_RECEIVER_GRPC_SSL_CERT_CHAIN_PATH:""}

gRPCSslTrustedCAsPath: ${SW_RECEIVER_GRPC_SSL_TRUSTED_CAS_PATH:""}

authentication: ${SW_AUTHENTICATION:""}

receiver-register:

selector: ${SW_RECEIVER_REGISTER:default}

default:

receiver-trace:

selector: ${SW_RECEIVER_TRACE:default}

default:

receiver-jvm:

selector: ${SW_RECEIVER_JVM:default}

default:

receiver-clr:

selector: ${SW_RECEIVER_CLR:default}

default:

receiver-profile:

selector: ${SW_RECEIVER_PROFILE:default}

default:

receiver-async-profiler:

selector: ${SW_RECEIVER_ASYNC_PROFILER:default}

default:

Used to manage the maximum size of the jfr file that can be received, the unit is Byte, default is 30M

jfrMaxSize: ${SW_RECEIVER_ASYNC_PROFILER_JFR_MAX_SIZE:31457280}

Used to determine whether to receive jfr in memory file or physical file mode

The memory file mode have fewer local file system limitations, so they are by default. But it costs more memory.

The physical file mode will use less memory when parsing and is more friendly to parsing large files.

However, if the storage of the tmp directory in the container is insufficient, the oap server instance may crash.

It is recommended to use physical file mode when volume mounting is used or the tmp directory has sufficient storage.

memoryParserEnabled: ${SW_RECEIVER_ASYNC_PROFILER_MEMORY_PARSER_ENABLED:true}

receiver-zabbix:

selector: ${SW_RECEIVER_ZABBIX:-}

default:

port: ${SW_RECEIVER_ZABBIX_PORT:10051}

host: ${SW_RECEIVER_ZABBIX_HOST:0.0.0.0}

activeFiles: ${SW_RECEIVER_ZABBIX_ACTIVE_FILES:agent}

service-mesh:

selector: ${SW_SERVICE_MESH:default}

default:

envoy-metric:

selector: ${SW_ENVOY_METRIC:default}

default:

acceptMetricsService: ${SW_ENVOY_METRIC_SERVICE:true}

alsHTTPAnalysis: ${SW_ENVOY_METRIC_ALS_HTTP_ANALYSIS:""}

alsTCPAnalysis: ${SW_ENVOY_METRIC_ALS_TCP_ANALYSIS:""}

`k8sServiceNameRule` allows you to customize the service name in ALS via Kubernetes metadata,

the available variables are `pod`, `service`, f.e., you can use `{service.metadata.name}-{pod.metadata.labels.version}`

to append the version number to the service name.

Be careful, when using environment variables to pass this configuration, use single quotes(`''`) to avoid it being evaluated by the shell.

k8sServiceNameRule: {K8S_SERVICE_NAME_RULE:"{pod.metadata.labels.(service.istio.io/canonical-name)}.${pod.metadata.namespace}"}

istioServiceNameRule: {ISTIO_SERVICE_NAME_RULE:"{serviceEntry.metadata.name}.${serviceEntry.metadata.namespace}"}

When looking up service informations from the Istio ServiceEntries, some

of the ServiceEntries might be created in several namespaces automatically

by some components, and OAP will randomly pick one of them to build the

service name, users can use this config to exclude ServiceEntries that

they don't want to be used. Comma separated.

istioServiceEntryIgnoredNamespaces: ${SW_ISTIO_SERVICE_ENTRY_IGNORED_NAMESPACES:""}

gRPCHost: ${SW_ALS_GRPC_HOST:0.0.0.0}

gRPCPort: ${SW_ALS_GRPC_PORT:0}

maxConcurrentCallsPerConnection: ${SW_ALS_GRPC_MAX_CONCURRENT_CALL:0}

maxMessageSize: ${SW_ALS_GRPC_MAX_MESSAGE_SIZE:0}

gRPCThreadPoolSize: ${SW_ALS_GRPC_THREAD_POOL_SIZE:0}

gRPCSslEnabled: ${SW_ALS_GRPC_SSL_ENABLED:false}

gRPCSslKeyPath: ${SW_ALS_GRPC_SSL_KEY_PATH:""}

gRPCSslCertChainPath: ${SW_ALS_GRPC_SSL_CERT_CHAIN_PATH:""}

gRPCSslTrustedCAsPath: ${SW_ALS_GRPC_SSL_TRUSTED_CAS_PATH:""}

kafka-fetcher:

selector: ${SW_KAFKA_FETCHER:-}

default:

bootstrapServers: ${SW_KAFKA_FETCHER_SERVERS:localhost:9092}

namespace: ${SW_NAMESPACE:""}

partitions: ${SW_KAFKA_FETCHER_PARTITIONS:3}

replicationFactor: ${SW_KAFKA_FETCHER_PARTITIONS_FACTOR:2}

enableNativeProtoLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_PROTO_LOG:true}

enableNativeJsonLog: ${SW_KAFKA_FETCHER_ENABLE_NATIVE_JSON_LOG:true}

consumers: ${SW_KAFKA_FETCHER_CONSUMERS:1}

kafkaHandlerThreadPoolSize: ${SW_KAFKA_HANDLER_THREAD_POOL_SIZE:-1}

kafkaHandlerThreadPoolQueueSize: ${SW_KAFKA_HANDLER_THREAD_POOL_QUEUE_SIZE:-1}

cilium-fetcher:

selector: ${SW_CILIUM_FETCHER:-}

default:

peerHost: ${SW_CILIUM_FETCHER_PEER_HOST:hubble-peer.kube-system.svc.cluster.local}

peerPort: ${SW_CILIUM_FETCHER_PEER_PORT:80}

fetchFailureRetrySecond: ${SW_CILIUM_FETCHER_FETCH_FAILURE_RETRY_SECOND:10}

sslConnection: ${SW_CILIUM_FETCHER_SSL_CONNECTION:false}

sslPrivateKeyFile: ${SW_CILIUM_FETCHER_PRIVATE_KEY_FILE_PATH:}

sslCertChainFile: ${SW_CILIUM_FETCHER_CERT_CHAIN_FILE_PATH:}

sslCaFile: ${SW_CILIUM_FETCHER_CA_FILE_PATH:}

convertClientAsServerTraffic: ${SW_CILIUM_FETCHER_CONVERT_CLIENT_AS_SERVER_TRAFFIC:true}

receiver-meter:

selector: ${SW_RECEIVER_METER:default}

default:

receiver-otel:

selector: ${SW_OTEL_RECEIVER:default}

default:

enabledHandlers: ${SW_OTEL_RECEIVER_ENABLED_HANDLERS:"otlp-metrics,otlp-logs"}

enabledOtelMetricsRules: ${SW_OTEL_RECEIVER_ENABLED_OTEL_METRICS_RULES:"apisix,nginx/*,k8s/*,istio-controlplane,vm,mysql/*,postgresql/*,oap,aws-eks/*,windows,aws-s3/*,aws-dynamodb/*,aws-gateway/*,redis/*,elasticsearch/*,rabbitmq/*,mongodb/*,kafka/*,pulsar/*,bookkeeper/*,rocketmq/*,clickhouse/*,activemq/*,kong/*"}

receiver-zipkin:

selector: ${SW_RECEIVER_ZIPKIN:-}

default:

Defines a set of span tag keys which are searchable.

The max length of key=value should be less than 256 or will be dropped.

searchableTracesTags: ${SW_ZIPKIN_SEARCHABLE_TAG_KEYS:http.method}

The sample rate precision is 1/10000, should be between 0 and 10000

sampleRate: ${SW_ZIPKIN_SAMPLE_RATE:10000}

The below configs are for OAP collect zipkin trace from HTTP

enableHttpCollector: ${SW_ZIPKIN_HTTP_COLLECTOR_ENABLED:true}

restHost: ${SW_RECEIVER_ZIPKIN_REST_HOST:0.0.0.0}

restPort: ${SW_RECEIVER_ZIPKIN_REST_PORT:9411}

restContextPath: ${SW_RECEIVER_ZIPKIN_REST_CONTEXT_PATH:/}

restMaxThreads: ${SW_RECEIVER_ZIPKIN_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_RECEIVER_ZIPKIN_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_RECEIVER_ZIPKIN_REST_QUEUE_SIZE:0}

The below configs are for OAP collect zipkin trace from kafka

enableKafkaCollector: ${SW_ZIPKIN_KAFKA_COLLECTOR_ENABLED:false}

kafkaBootstrapServers: ${SW_ZIPKIN_KAFKA_SERVERS:localhost:9092}

kafkaGroupId: ${SW_ZIPKIN_KAFKA_GROUP_ID:zipkin}

kafkaTopic: ${SW_ZIPKIN_KAFKA_TOPIC:zipkin}

Kafka consumer config, JSON format as Properties. If it contains the same key with above, would override.

kafkaConsumerConfig: ${SW_ZIPKIN_KAFKA_CONSUMER_CONFIG:"{\"auto.offset.reset\":\"earliest\",\"enable.auto.commit\":true}"}

The Count of the topic consumers

kafkaConsumers: ${SW_ZIPKIN_KAFKA_CONSUMERS:1}

kafkaHandlerThreadPoolSize: ${SW_ZIPKIN_KAFKA_HANDLER_THREAD_POOL_SIZE:-1}

kafkaHandlerThreadPoolQueueSize: ${SW_ZIPKIN_KAFKA_HANDLER_THREAD_POOL_QUEUE_SIZE:-1}

receiver-browser:

selector: ${SW_RECEIVER_BROWSER:default}

default:

The sample rate precision is 1/10000. 10000 means 100% sample in default.

sampleRate: ${SW_RECEIVER_BROWSER_SAMPLE_RATE:10000}

receiver-log:

selector: ${SW_RECEIVER_LOG:default}

default:

query:

selector: ${SW_QUERY:graphql}

graphql:

Enable the log testing API to test the LAL.

NOTE: This API evaluates untrusted code on the OAP server.

A malicious script can do significant damage (steal keys and secrets, remove files and directories, install malware, etc).

As such, please enable this API only when you completely trust your users.

enableLogTestTool: ${SW_QUERY_GRAPHQL_ENABLE_LOG_TEST_TOOL:false}

Maximum complexity allowed for the GraphQL query that can be used to

abort a query if the total number of data fields queried exceeds the defined threshold.

maxQueryComplexity: ${SW_QUERY_MAX_QUERY_COMPLEXITY:3000}

Allow user add, disable and update UI template

enableUpdateUITemplate: ${SW_ENABLE_UPDATE_UI_TEMPLATE:false}

"On demand log" allows users to fetch Pod containers' log in real time,

because this might expose secrets in the logs (if any), users need

to enable this manually, and add permissions to OAP cluster role.

enableOnDemandPodLog: ${SW_ENABLE_ON_DEMAND_POD_LOG:false}

This module is for Zipkin query API and support zipkin-lens UI

query-zipkin:

selector: ${SW_QUERY_ZIPKIN:-}

default:

For HTTP server

restHost: ${SW_QUERY_ZIPKIN_REST_HOST:0.0.0.0}

restPort: ${SW_QUERY_ZIPKIN_REST_PORT:9412}

restContextPath: ${SW_QUERY_ZIPKIN_REST_CONTEXT_PATH:/zipkin}

restMaxThreads: ${SW_QUERY_ZIPKIN_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_QUERY_ZIPKIN_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_QUERY_ZIPKIN_REST_QUEUE_SIZE:0}

Default look back for traces and autocompleteTags, 1 day in millis

lookback: ${SW_QUERY_ZIPKIN_LOOKBACK:86400000}

The Cache-Control max-age (seconds) for serviceNames, remoteServiceNames and spanNames

namesMaxAge: ${SW_QUERY_ZIPKIN_NAMES_MAX_AGE:300}

The below config are OAP support for zipkin-lens UI

Default traces query max size

uiQueryLimit: ${SW_QUERY_ZIPKIN_UI_QUERY_LIMIT:10}

Default look back on the UI for search traces, 15 minutes in millis

uiDefaultLookback: ${SW_QUERY_ZIPKIN_UI_DEFAULT_LOOKBACK:900000}

#This module is for PromQL API.

promql:

selector: ${SW_PROMQL:default}

default:

For HTTP server

restHost: ${SW_PROMQL_REST_HOST:0.0.0.0}

restPort: ${SW_PROMQL_REST_PORT:9090}

restContextPath: ${SW_PROMQL_REST_CONTEXT_PATH:/}

restMaxThreads: ${SW_PROMQL_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_PROMQL_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_PROMQL_REST_QUEUE_SIZE:0}

The below config is for the API buildInfo, set the value to mock the build info.

buildInfoVersion: ${SW_PROMQL_BUILD_INFO_VERSION:"2.45.0"}

buildInfoRevision: ${SW_PROMQL_BUILD_INFO_REVISION:""}

buildInfoBranch: ${SW_PROMQL_BUILD_INFO_BRANCH:""}

buildInfoBuildUser: ${SW_PROMQL_BUILD_INFO_BUILD_USER:""}

buildInfoBuildDate: ${SW_PROMQL_BUILD_INFO_BUILD_DATE:""}

buildInfoGoVersion: ${SW_PROMQL_BUILD_INFO_GO_VERSION:""}

#This module is for LogQL API.

logql:

selector: ${SW_LOGQL:default}

default:

For HTTP server

restHost: ${SW_LOGQL_REST_HOST:0.0.0.0}

restPort: ${SW_LOGQL_REST_PORT:3100}

restContextPath: ${SW_LOGQL_REST_CONTEXT_PATH:/}

restMaxThreads: ${SW_LOGQL_REST_MAX_THREADS:200}

restIdleTimeOut: ${SW_LOGQL_REST_IDLE_TIMEOUT:30000}

restAcceptQueueSize: ${SW_LOGQL_REST_QUEUE_SIZE:0}

alarm:

selector: ${SW_ALARM:default}

default:

telemetry:

selector: ${SW_TELEMETRY:prometheus}

none:

prometheus:

host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0}

port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234}

sslEnabled: ${SW_TELEMETRY_PROMETHEUS_SSL_ENABLED:false}

sslKeyPath: ${SW_TELEMETRY_PROMETHEUS_SSL_KEY_PATH:""}

sslCertChainPath: ${SW_TELEMETRY_PROMETHEUS_SSL_CERT_CHAIN_PATH:""}

configuration:

selector: ${SW_CONFIGURATION:none}

none:

grpc:

host: ${SW_DCS_SERVER_HOST:""}

port: ${SW_DCS_SERVER_PORT:80}

clusterName: ${SW_DCS_CLUSTER_NAME:SkyWalking}

period: ${SW_DCS_PERIOD:20}

maxInboundMessageSize: ${SW_DCS_MAX_INBOUND_MESSAGE_SIZE:4194304}

apollo:

apolloMeta: ${SW_CONFIG_APOLLO:http://localhost:8080}

apolloCluster: ${SW_CONFIG_APOLLO_CLUSTER:default}

apolloEnv: ${SW_CONFIG_APOLLO_ENV:""}

appId: ${SW_CONFIG_APOLLO_APP_ID:skywalking}

zookeeper:

period: ${SW_CONFIG_ZK_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.

namespace: ${SW_CONFIG_ZK_NAMESPACE:/default}

hostPort: ${SW_CONFIG_ZK_HOST_PORT:localhost:2181}

Retry Policy

baseSleepTimeMs: ${SW_CONFIG_ZK_BASE_SLEEP_TIME_MS:1000} # initial amount of time to wait between retries

maxRetries: ${SW_CONFIG_ZK_MAX_RETRIES:3} # max number of times to retry

etcd:

period: ${SW_CONFIG_ETCD_PERIOD:60} # Unit seconds, sync period. Default fetch every 60 seconds.

endpoints: ${SW_CONFIG_ETCD_ENDPOINTS:http://localhost:2379}

namespace: ${SW_CONFIG_ETCD_NAMESPACE:/skywalking}

authentication: ${SW_CONFIG_ETCD_AUTHENTICATION:false}

user: ${SW_CONFIG_ETCD_USER:}

password: ${SW_CONFIG_ETCD_password:}

consul:

Consul host and ports, separated by comma, e.g. 1.2.3.4:8500,2.3.4.5:8500

hostAndPorts: ${SW_CONFIG_CONSUL_HOST_AND_PORTS:1.2.3.4:8500}

Sync period in seconds. Defaults to 60 seconds.

period: ${SW_CONFIG_CONSUL_PERIOD:60}

Consul aclToken

aclToken: ${SW_CONFIG_CONSUL_ACL_TOKEN:""}

k8s-configmap:

period: ${SW_CONFIG_CONFIGMAP_PERIOD:60}

namespace: ${SW_CLUSTER_K8S_NAMESPACE:default}

labelSelector: ${SW_CLUSTER_K8S_LABEL:app=collector,release=skywalking}

nacos:

Nacos Server Host

serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:127.0.0.1}

Nacos Server Port

port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}

Nacos Configuration Group

group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}

Nacos Configuration namespace

namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:public}

Unit seconds, sync period. Default fetch every 60 seconds.

period: ${SW_CONFIG_NACOS_PERIOD:60}

Nacos auth username

username: ${SW_CONFIG_NACOS_USERNAME:nacos}

password: ${SW_CONFIG_NACOS_PASSWORD:nacos}

Nacos auth accessKey

accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}

secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}

exporter:

selector: ${SW_EXPORTER:-}

default:

gRPC exporter

enableGRPCMetrics: ${SW_EXPORTER_ENABLE_GRPC_METRICS:false}

gRPCTargetHost: ${SW_EXPORTER_GRPC_HOST:127.0.0.1}

gRPCTargetPort: ${SW_EXPORTER_GRPC_PORT:9870}

Kafka exporter

enableKafkaTrace: ${SW_EXPORTER_ENABLE_KAFKA_TRACE:false}

enableKafkaLog: ${SW_EXPORTER_ENABLE_KAFKA_LOG:false}

kafkaBootstrapServers: ${SW_EXPORTER_KAFKA_SERVERS:localhost:9092}

Kafka producer config, JSON format as Properties.

kafkaProducerConfig: ${SW_EXPORTER_KAFKA_PRODUCER_CONFIG:""}

kafkaTopicTrace: ${SW_EXPORTER_KAFKA_TOPIC_TRACE:skywalking-export-trace}

kafkaTopicLog: ${SW_EXPORTER_KAFKA_TOPIC_LOG:skywalking-export-log}

exportErrorStatusTraceOnly: ${SW_EXPORTER_KAFKA_TRACE_FILTER_ERROR:false}

health-checker:

selector: ${SW_HEALTH_CHECKER:-}

default:

checkIntervalSeconds: ${SW_HEALTH_CHECKER_INTERVAL_SECONDS:5}

status-query:

selector: ${SW_STATUS_QUERY:default}

default:

Include the list of keywords to filter configurations including secrets. Separate keywords by a comma.

keywords4MaskingSecretsOfConfig: ${SW_DEBUGGING_QUERY_KEYWORDS_FOR_MASKING_SECRETS:user,password,token,accessKey,secretKey,authentication}

configuration-discovery:

selector: ${SW_CONFIGURATION_DISCOVERY:default}

default:

disableMessageDigest: ${SW_DISABLE_MESSAGE_DIGEST:false}

receiver-event:

selector: ${SW_RECEIVER_EVENT:default}

default:

receiver-ebpf:

selector: ${SW_RECEIVER_EBPF:default}

default:

The continuous profiling policy cache time, Unit is second.

continuousPolicyCacheTimeout: ${SW_CONTINUOUS_POLICY_CACHE_TIMEOUT:60}

gRPCHost: ${SW_EBPF_GRPC_HOST:0.0.0.0}

gRPCPort: ${SW_EBPF_GRPC_PORT:0}

maxConcurrentCallsPerConnection: ${SW_EBPF_GRPC_MAX_CONCURRENT_CALL:0}

maxMessageSize: ${SW_EBPF_ALS_GRPC_MAX_MESSAGE_SIZE:0}

gRPCThreadPoolSize: ${SW_EBPF_GRPC_THREAD_POOL_SIZE:0}

gRPCSslEnabled: ${SW_EBPF_GRPC_SSL_ENABLED:false}

gRPCSslKeyPath: ${SW_EBPF_GRPC_SSL_KEY_PATH:""}

gRPCSslCertChainPath: ${SW_EBPF_GRPC_SSL_CERT_CHAIN_PATH:""}

gRPCSslTrustedCAsPath: ${SW_EBPF_GRPC_SSL_TRUSTED_CAS_PATH:""}

receiver-telegraf:

selector: ${SW_RECEIVER_TELEGRAF:default}

default:

activeFiles: ${SW_RECEIVER_TELEGRAF_ACTIVE_FILES:vm}

aws-firehose:

selector: ${SW_RECEIVER_AWS_FIREHOSE:default}

default:

host: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_HOST:0.0.0.0}

port: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_PORT:12801}

contextPath: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_CONTEXT_PATH:/}

maxThreads: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_MAX_THREADS:200}

idleTimeOut: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_IDLE_TIME_OUT:30000}

acceptQueueSize: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_ACCEPT_QUEUE_SIZE:0}

maxRequestHeaderSize: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_MAX_REQUEST_HEADER_SIZE:8192}

firehoseAccessKey: ${SW_RECEIVER_AWS_FIREHOSE_ACCESS_KEY:}

enableTLS: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_ENABLE_TLS:false}

tlsKeyPath: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_TLS_KEY_PATH:}

tlsCertChainPath: ${SW_RECEIVER_AWS_FIREHOSE_HTTP_TLS_CERT_CHAIN_PATH:}

ai-pipeline:

selector: ${SW_AI_PIPELINE:default}

default:

uriRecognitionServerAddr: ${SW_AI_PIPELINE_URI_RECOGNITION_SERVER_ADDR:}

uriRecognitionServerPort: ${SW_AI_PIPELINE_URI_RECOGNITION_SERVER_PORT:17128}

baselineServerAddr: ${SW_API_PIPELINE_BASELINE_SERVICE_HOST:}

baselineServerPort: ${SW_API_PIPELINE_BASELINE_SERVICE_PORT:18080}


apiVersion: v1

kind: Secret

metadata:

name: skywalking-secrets

namespace: default

type: Opaque

data:

nacos-username: "bmFjb3M="

nacos-password: "bmFjb3M="

es-username: ""

es-password: ""


apiVersion: v1

kind: Service

metadata:

name: skywalking-oap

namespace: default

labels:

app: skywalking-oap

component: observability

spec:

ports:

  • port: 12800

name: rest

targetPort: 12800

  • port: 11800

name: grpc

targetPort: 11800

  • port: 1234

name: metrics

targetPort: 1234

selector:

app: skywalking-oap

type: ClusterIP


apiVersion: apps/v1

kind: Deployment

metadata:

name: skywalking-oap

namespace: default

labels:

app: skywalking-oap

spec:

replicas: 1

selector:

matchLabels:

app: skywalking-oap

strategy:

type: Recreate

template:

metadata:

labels:

app: skywalking-oap

release: skywalking

annotations:

prometheus.io/scrape: "true"

prometheus.io/port: "1234"

spec:

serviceAccountName: skywalking-oap

securityContext:

runAsUser: 1000

fsGroup: 1000

runAsNonRoot: true

containers:

  • name: skywalking-oap

image: apache/skywalking-oap-server:10.2.0

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 11800

name: grpc

  • containerPort: 12800

name: rest

  • containerPort: 1234

name: metrics

resources:

requests:

memory: "1.5Gi"

cpu: "500m"

limits:

cpu: "1"

memory: "2.5Gi"

env:

NACOS日志修复

  • name: NACOS_CLIENT_LOG_PATH

value: "/dev/null"

  • name: NACOS_CLIENT_SNAPSHOT_PATH

value: "/tmp/nacos/snapshot"

  • name: JM_LOG_PATH

value: "/dev/null"

  • name: LOGGING_LEVEL_COM_ALIBABA_NACOS

value: "ERROR"

  • name: SW_STORAGE

value: "elasticsearch"

JVM参数

  • name: JAVA_OPTS

value: >

-Dnacos.logging.path=/dev/null

-Dnacos.logging.default.config.enabled=false

-Dcom.alibaba.nacos.config.log.dir=/dev/null

-Dcom.alibaba.nacos.naming.log.dir=/dev/null

-Dlogging.path=/dev/null

-Dcom.linecorp.armeria.warnNettyVersions=false

-XX:+UseContainerSupport

-XX:MaxRAMPercentage=75.0

  • name: SW_CONFIGURATION

value: "nacos"

  • name: SW_CLUSTER_NACOS_CONTEXT_PATH

value: "/nacos"

  • name: SW_CLUSTER

value: "nacos"

  • name: SW_CONFIG_NACOS_SERVER_ADDR

value: "nacos-0.nacos-headless.default.svc.cluster.local"

  • name: SW_CONFIG_NACOS_SERVER_PORT

value: "8848"

  • name: SW_CLUSTER_NACOS_HOST_PORT

value: "nacos-0.nacos-headless.default.svc.cluster.local:8848"

  • name: SW_CLUSTER_NACOS_USERNAME

valueFrom:

secretKeyRef:

name: skywalking-secrets

key: nacos-username

  • name: SW_CLUSTER_NACOS_PASSWORD

valueFrom:

secretKeyRef:

name: skywalking-secrets

key: nacos-password

  • name: SW_STORAGE_ES_CLUSTER_NODES

value: "es7-cluster-0.elasticsearch7.default.svc.cluster.local:9200"

  • name: SW_STORAGE_ES_HTTP_PROTOCOL

value: "http"

  • name: SW_ES_USER

valueFrom:

secretKeyRef:

name: skywalking-secrets

key: es-username

  • name: SW_ES_PASSWORD

valueFrom:

secretKeyRef:

name: skywalking-secrets

key: es-password

  • name: real_host

valueFrom:

fieldRef:

fieldPath: status.podIP

  • name: TZ

value: Asia/Shanghai

  • name: SW_CORE_RECORD_DATA_TTL

value: "3"

  • name: SW_CORE_METRICS_DATA_TTL

value: "3"

  • name: SW_STORAGE_ES_BULK_ACTIONS

value: "2000"

  • name: SW_TELEMETRY

value: "prometheus"

  • name: SW_TELEMETRY_PROMETHEUS_PORT

value: "1234"

securityContext:

privileged: true

#runAsUser: 0

capabilities:

add: ["ALL"]

readOnlyRootFilesystem: false

allowPrivilegeEscalation: true

volumeMounts:

  • name: config

mountPath: /skywalking/config/application.yml

subPath: application.yml

  • name: temp-snapshot

mountPath: /tmp/nacos

subPath: nacos

volumes:

  • name: config

configMap:

name: oap-config

  • name: temp-snapshot

emptyDir: {}

11、skywalking-ui

apiVersion: apps/v1

kind: Deployment

metadata:

name: skywalking-ui

namespace: default

labels:

app: skywalking-ui

spec:

replicas: 1

selector:

matchLabels:

app: skywalking-ui

strategy:

type: Recreate

template:

metadata:

labels:

app: skywalking-ui

annotations:

prometheus.io/scrape: "true"

prometheus.io/port: "8080"

spec:

securityContext:

runAsUser: 1000

runAsGroup: 1000

fsGroup: 1000

runAsNonRoot: true

containers:

  • name: skywalking-ui

image: apache/skywalking-ui:10.2.0

imagePullPolicy: IfNotPresent

ports:

  • containerPort: 8080

name: http

env:

  • name: SW_OAP_ADDRESS

value: http://skywalking-oap:12800

  • name: SW_AUTH

value: "false"

  • name: TZ

value: Asia/Shanghai

  • name: JAVA_OPTS

value: "-Xmx512m -Xms256m"

  • name: SW_SERVER_HOST

value: "0.0.0.0"

  • name: SW_TIMEOUT

value: "10000"

resources:

limits:

cpu: "500m"

memory: "768Mi"

requests:

cpu: "100m"

memory: "256Mi"

securityContext:

privileged: true

#runAsUser: 0

capabilities:

add: ["ALL"]

readOnlyRootFilesystem: false

allowPrivilegeEscalation: true

lifecycle:

preStop:

exec:

command: ["sh", "-c", "sleep 15"]


apiVersion: v1

kind: Service

metadata:

name: skywalking-ui

namespace: default

labels:

app: skywalking-ui

spec:

type: NodePort

selector:

app: skywalking-ui

ports:

  • protocol: TCP

name: http

port: 80

targetPort: 8080

nodePort: 30157

12、运行效果

相关推荐
x县豆瓣酱3 小时前
【第五节】部署http接口到ubuntu server上的docker内
ubuntu·http·docker
Continue_with7 小时前
docker设置代理
运维·docker·容器
彭泽布衣7 小时前
远程登录docker执行shell报错input is not a terminal问题
运维·docker·容器
炫爱小七7 小时前
包稳定的Docker 安装方式(CentOS)
docker·容器·centos
搂……住8 小时前
shiro550反序列化漏洞复现(附带docker源)
安全·docker·容器
IT成长日记8 小时前
【Docker基础】Dockerfile指令速览:基础常用指令详解
docker·容器·dockerfile·cmd·copy·from·run
ezreal_pan8 小时前
docker设置镜像加速
运维·docker·容器
x县豆瓣酱10 小时前
【第四节】ubuntu server安装docker
linux·ubuntu·docker
伊成11 小时前
docker安装Consul笔记
笔记·docker·consul