Skip to content
Merged
Show file tree
Hide file tree
Changes from 58 commits
Commits
Show all changes
89 commits
Select commit Hold shift + click to select a range
46ed258
Update apm-network proto submodule manually
cqhasy Sep 21, 2025
c556d8d
feat(add go profile data collect、prase、store)
cqhasy Sep 24, 2025
5f01462
feat(add go analyzer)
cqhasy Sep 25, 2025
332747d
fix(remove the start label)
cqhasy Sep 26, 2025
ac584f9
Merge branch 'master' into master
cqhasy Sep 26, 2025
e285f20
docs:(update the changes.md)
cqhasy Oct 17, 2025
b15c41c
feat(add go profile e2e test)
cqhasy Oct 23, 2025
1593082
test ci
cqhasy Oct 23, 2025
0eb4f7e
fix(delete wrong java expeected)
cqhasy Oct 23, 2025
50f2d34
feat(test:go;ci)add go profile test,add to ci
cqhasy Oct 24, 2025
1a1f882
feat ci error
cqhasy Oct 24, 2025
ee3e750
feat ci error
cqhasy Oct 24, 2025
c84db28
feat ci error
cqhasy Oct 24, 2025
bcdc2cc
feat ci error
cqhasy Oct 24, 2025
cc2b3cc
feat ci error
cqhasy Oct 24, 2025
07eef41
feat ci error
cqhasy Oct 24, 2025
ea46b39
feat ci error
cqhasy Oct 24, 2025
3c72f4d
feat ci error
cqhasy Oct 25, 2025
c4f9e1f
feat ci error
cqhasy Oct 25, 2025
412e752
feat ci error
cqhasy Oct 25, 2025
3add337
feat ci error
cqhasy Oct 25, 2025
3044195
merge pprof
cqhasy Oct 25, 2025
b0d71f8
update query-protocol
cqhasy Oct 25, 2025
120860e
update query-protocol
cqhasy Oct 25, 2025
882ae0d
add some log for go profile e2e
cqhasy Oct 25, 2025
d4136ab
add some log for go profile e2e
cqhasy Oct 25, 2025
49e0c76
fix ci
cqhasy Oct 25, 2025
ec1d993
fix ci
cqhasy Oct 25, 2025
71e059e
fix ci
cqhasy Oct 25, 2025
34656a8
fix ci
cqhasy Oct 25, 2025
f98ebc7
fix ci
cqhasy Oct 26, 2025
ce666ce
fix ci
cqhasy Oct 26, 2025
1098d3a
fix ci
cqhasy Oct 26, 2025
6c1ab7b
fix ci
cqhasy Oct 26, 2025
a28d2aa
fix ci
cqhasy Oct 26, 2025
fa82fc1
fix ci
cqhasy Oct 26, 2025
e81831e
fix ci
cqhasy Oct 26, 2025
e95dd79
fix ci
cqhasy Oct 26, 2025
1f47a62
fix ci
cqhasy Oct 26, 2025
72bf450
fix ci
cqhasy Oct 26, 2025
2963949
fix ci
cqhasy Oct 26, 2025
bb5b290
fix ci
cqhasy Oct 26, 2025
de1717f
fix ci
cqhasy Oct 26, 2025
625226f
fix ci
cqhasy Oct 26, 2025
f3322d1
fix ci
cqhasy Oct 26, 2025
1e5ceae
fix ci
cqhasy Oct 26, 2025
176d64f
fix ci
cqhasy Oct 26, 2025
9ba032f
fix ci
cqhasy Oct 26, 2025
600e083
fix ci
cqhasy Oct 26, 2025
f681970
fix ci
cqhasy Oct 26, 2025
256cf08
fix ci
cqhasy Oct 26, 2025
ba0fd1e
fix ci
cqhasy Oct 27, 2025
fbf76d2
fix ci
cqhasy Oct 27, 2025
3044b47
fix ci
cqhasy Oct 27, 2025
fa94f1d
test ci
cqhasy Oct 27, 2025
998ccdb
Set skywalking-ui to commit 51817f32de0cd5c4fc78f9c25399316f23d782e8
cqhasy Oct 27, 2025
16f1f72
test ci
cqhasy Oct 27, 2025
3a0b246
roll back ci
cqhasy Oct 27, 2025
7cb024a
fix(move go profile to pofiling)
cqhasy Oct 27, 2025
959479e
fix(move go profile to pofiling)
cqhasy Oct 27, 2025
9eac3b9
fix(move go profile to pofiling)
cqhasy Oct 27, 2025
d73595d
fix(move go profile to pofiling)
cqhasy Oct 27, 2025
cee4873
fix(move go profile to pofiling)
cqhasy Oct 28, 2025
eee3c65
fix(roll back ui)
cqhasy Oct 28, 2025
f0a9af4
fix ci
cqhasy Oct 28, 2025
a60c033
fix ci
cqhasy Oct 28, 2025
c471434
fix c
cqhasy Oct 28, 2025
49823d7
roll back ci
cqhasy Oct 28, 2025
50e7a3e
Merge branch 'master' into master
mrproliu Oct 28, 2025
82a490b
fix(use library pprof,roll back proto version);docs(update changes.md)
cqhasy Oct 29, 2025
46654e9
Merge branch 'master' of github.com:cqhasy/skywalking
cqhasy Oct 29, 2025
7537d87
refactor: extract method signature lookup into a separate function
cqhasy Oct 29, 2025
55ac28e
fix(analyze java first then go in profileAnalyzer )
cqhasy Oct 29, 2025
284d402
Merge branch 'master' into master
mrproliu Oct 29, 2025
b347616
refactor(separate language type a class)
cqhasy Oct 30, 2025
81681b4
Merge branch 'master' of github.com:cqhasy/skywalking
cqhasy Oct 30, 2025
8f3e9fd
roll submodule proto to d4da569
cqhasy Oct 30, 2025
dfaaac5
fix(delete no use build,change language_type store method)
cqhasy Oct 30, 2025
bd122b5
test ci
cqhasy Oct 30, 2025
f99831b
fix ci
cqhasy Oct 30, 2025
278fa18
fix ci
cqhasy Oct 30, 2025
eaaa361
fix ci
cqhasy Oct 30, 2025
5ba1a8e
fix ci
cqhasy Oct 31, 2025
0d6bcc7
fix ci
cqhasy Oct 31, 2025
dea8217
fix ci
cqhasy Oct 31, 2025
2f89908
role back ci
cqhasy Oct 31, 2025
dcf2796
fix(delete no use variable,roll back kong)
cqhasy Oct 31, 2025
582814a
fix(align field annotation and adjust log level in ProfileAnalyzer)
cqhasy Oct 31, 2025
5717d41
add NoIndexing for language
cqhasy Oct 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
213 changes: 108 additions & 105 deletions .github/workflows/skywalking.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,9 @@ jobs:
config: test/e2e-v2/cases/profiling/trace/opensearch/e2e.yaml
env: OPENSEARCH_VERSION=2.4.0

- name: Go Profiling
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
- name: Go Profiling
- name: Go Trace Profiling

config: test/e2e-v2/cases/go/profiling-cases.yaml
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please move this into test/e2e-v2/profiling/trace/go folder.


- name: eBPF Profiling On CPU BanyanDB
config: test/e2e-v2/cases/profiling/ebpf/oncpu/banyandb/e2e.yaml
docker:
Expand Down Expand Up @@ -969,110 +972,110 @@ jobs:
with:
e2e-file: $GITHUB_WORKSPACE/test/e2e-v2/cases/simple/jdk/e2e.yaml

# e2e-test-banyandb-stages:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why you need to change it?

# if: |
# ( always() && ! cancelled() ) &&
# ((github.event_name == 'schedule' && github.repository == 'apache/skywalking') || needs.changes.outputs.oap == 'true')
# name: E2E test
# needs: [docker, dist-tar]
# runs-on: ${{ matrix.test.runs-on || 'ubuntu-latest' }}
# timeout-minutes: 60
# env:
# BANYANDB_DATA_GENERATE_ROOT: test/e2e-v2/cases/storage/banyandb/data-generate
# strategy:
# fail-fast: false
# matrix:
# test:
# - name: BanyanDB Stages
# config: test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# persist-credentials: false
# - run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
# - uses: apache/skywalking-cli/actions/setup@master
# with:
# version: ${{ env.SW_CTL_COMMIT }}
# - uses: actions/download-artifact@v4
# name: Download docker images
# with:
# name: docker-images-11
# path: docker-images
# - name: Load docker images
# run: |
# find docker-images -name "*.tar" -exec docker load -i {} \;
# find docker-images -name "*.tar" -exec rm {} \;
# - uses: actions/download-artifact@v4
# name: Download distribution tar
# with:
# name: dist
# path: dist
# - name: Login to ghcr
# uses: docker/login-action@v3
# with:
# registry: ghcr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Cache maven repository
# uses: actions/cache@v4
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-maven-${{ hashFiles('test/e2e-v2/java-test-service/**/pom.xml') }}
# restore-keys: ${{ runner.os }}-maven-
# - name: Prepare test services
# shell: bash
# run: ./mvnw -B -q -f test/e2e-v2/java-test-service/pom.xml clean flatten:flatten package
# - name: Set env var
# run: |
# echo "${{ matrix.test.env }}" >> $GITHUB_ENV
# - name: Build test image
# if: matrix.test.docker != null
# run: docker build -t ${{ matrix.test.docker.name }} -f ${{ matrix.test.docker.base }}/${{ matrix.test.docker.file }} ${{ matrix.test.docker.base }}
# - name: Generate BanyanDB cold data
# run: |
# export $(grep -v '^#' test/e2e-v2/script/env | xargs)
# docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml up -d
# CONTAINER_ID=$(docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml ps -q banyandb)
# echo "⌛ monitoring segment files..."
# found=false
# for i in {1..60}; do
# # check if segment files exist
# if docker exec $CONTAINER_ID sh -c '[ -n "$(ls /tmp/measure-data/measure/data/metricsDay/seg* 2>/dev/null)" ]'; then
# echo "✅ found segment files"
# sleep 180
# # create and copy files
# docker cp $CONTAINER_ID:/tmp ${BANYANDB_DATA_GENERATE_ROOT}
# docker cp $CONTAINER_ID:/tmp/measure-data/measure/data/metadata ${BANYANDB_DATA_GENERATE_ROOT}
# found=true
# break
# else
# echo "⏳ didn't find segment files (retry $i/60)"
# sleep 10
# fi
# done
# if $found; then
# echo "✅ segment files copied to ${BANYANDB_DATA_GENERATE_ROOT}"
# else
# echo "❌ segment files not found"
# exit 1
# fi
# docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml down -v
# - name: ${{ matrix.test.name }}
# uses: apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
# with:
# e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
# - if: ${{ failure() }}
# run: |
# df -h
# du -sh .
# docker images
# - uses: actions/upload-artifact@v4
# if: ${{ failure() }}
# name: Upload Logs
# with:
# name: test-logs-${{ matrix.test.name }}
# path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"
# e2e-test-banyandb-stages:
# if: |
# ( always() && ! cancelled() ) &&
# ((github.event_name == 'schedule' && github.repository == 'apache/skywalking') || needs.changes.outputs.oap == 'true')
# name: E2E test
# needs: [docker, dist-tar]
# runs-on: ${{ matrix.test.runs-on || 'ubuntu-latest' }}
# timeout-minutes: 60
# env:
# BANYANDB_DATA_GENERATE_ROOT: test/e2e-v2/cases/storage/banyandb/data-generate
# strategy:
# fail-fast: false
# matrix:
# test:
# - name: BanyanDB Stages
# config: test/e2e-v2/cases/storage/banyandb/stages/e2e.yaml
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# persist-credentials: false
# - run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
# - uses: apache/skywalking-cli/actions/setup@master
# with:
# version: ${{ env.SW_CTL_COMMIT }}
# - uses: actions/download-artifact@v4
# name: Download docker images
# with:
# name: docker-images-11
# path: docker-images
# - name: Load docker images
# run: |
# find docker-images -name "*.tar" -exec docker load -i {} \;
# find docker-images -name "*.tar" -exec rm {} \;
# - uses: actions/download-artifact@v4
# name: Download distribution tar
# with:
# name: dist
# path: dist
# - name: Login to ghcr
# uses: docker/login-action@v3
# with:
# registry: ghcr.io
# username: ${{ github.repository_owner }}
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Cache maven repository
# uses: actions/cache@v4
# with:
# path: ~/.m2/repository
# key: ${{ runner.os }}-maven-${{ hashFiles('test/e2e-v2/java-test-service/**/pom.xml') }}
# restore-keys: ${{ runner.os }}-maven-
# - name: Prepare test services
# shell: bash
# run: ./mvnw -B -q -f test/e2e-v2/java-test-service/pom.xml clean flatten:flatten package
# - name: Set env var
# run: |
# echo "${{ matrix.test.env }}" >> $GITHUB_ENV
# - name: Build test image
# if: matrix.test.docker != null
# run: docker build -t ${{ matrix.test.docker.name }} -f ${{ matrix.test.docker.base }}/${{ matrix.test.docker.file }} ${{ matrix.test.docker.base }}
# - name: Generate BanyanDB cold data
# run: |
# export $(grep -v '^#' test/e2e-v2/script/env | xargs)
# docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml up -d
# CONTAINER_ID=$(docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml ps -q banyandb)
# echo "⌛ monitoring segment files..."
# found=false
# for i in {1..60}; do
# # check if segment files exist
# if docker exec $CONTAINER_ID sh -c '[ -n "$(ls /tmp/measure-data/measure/data/metricsDay/seg* 2>/dev/null)" ]'; then
# echo "✅ found segment files"
# sleep 180
# # create and copy files
# docker cp $CONTAINER_ID:/tmp ${BANYANDB_DATA_GENERATE_ROOT}
# docker cp $CONTAINER_ID:/tmp/measure-data/measure/data/metadata ${BANYANDB_DATA_GENERATE_ROOT}
# found=true
# break
# else
# echo "⏳ didn't find segment files (retry $i/60)"
# sleep 10
# fi
# done
# if $found; then
# echo "✅ segment files copied to ${BANYANDB_DATA_GENERATE_ROOT}"
# else
# echo "❌ segment files not found"
# exit 1
# fi
# docker compose -f ${BANYANDB_DATA_GENERATE_ROOT}/docker-compose.yml down -v
# - name: ${{ matrix.test.name }}
# uses: apache/skywalking-infra-e2e@cf589b4a0b9f8e6f436f78e9cfd94a1ee5494180
# with:
# e2e-file: $GITHUB_WORKSPACE/${{ matrix.test.config }}
# - if: ${{ failure() }}
# run: |
# df -h
# du -sh .
# docker images
# - uses: actions/upload-artifact@v4
# if: ${{ failure() }}
# name: Upload Logs
# with:
# name: test-logs-${{ matrix.test.name }}
# path: "${{ env.SW_INFRA_E2E_LOG_DIR }}"

required:
if: always()
Expand Down Expand Up @@ -1116,4 +1119,4 @@ jobs:
[[ ${e2eJavaVersionResults} == 'success' ]] || [[ ${execute} != 'true' && ${e2eJavaVersionResults} == 'skipped' ]] || exit -7;
[[ ${timeConsumingITResults} == 'success' ]] || [[ ${execute} != 'true' && ${timeConsumingITResults} == 'skipped' ]] || exit -8;

exit 0;
exit 0;
1 change: 1 addition & 0 deletions .licenserc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ header:
- '**/mockito-extensions/**'
- 'oap-server/server-library/library-async-profiler-jfr-parser'
- 'docs/en/changes/changes.tpl'
- 'oap-server/server-core/src/main/proto/profile.proto'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should not have this file.


comment: on-failure

Expand Down
2 changes: 1 addition & 1 deletion apm-protocol/apm-network/src/main/proto
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should not update the protocol, the protocol has already been updated to the latest version.

4 changes: 3 additions & 1 deletion docs/en/changes/changes.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,9 @@
* Update Grafana dashboards for OAP observability.
* BanyanDB: fix query `getInstance` by instance ID.
* Support the go agent(0.7.0 release) bundled pprof profiling feature.

* Profile-receiver-plugin: feat: add go profile data receive func; add google pprof proto to prase.
* Storage: feat: add isGo column to ProfileThreadSnapshotRecord.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The column name should be changed.

* Feat: add go profile analyzer

#### UI

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ public class ProfileThreadSnapshotRecord extends Record {
public static final String DUMP_TIME = "dump_time";
public static final String SEQUENCE = "sequence";
public static final String STACK_BINARY = "stack_binary";
public static final String IS_GO = "is_go";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The field name should not be related to specific language.


@Column(name = TASK_ID)
@SQLDatabase.CompositeIndex(withColumns = {SEGMENT_ID})
Expand All @@ -69,6 +70,50 @@ public class ProfileThreadSnapshotRecord extends Record {
private int sequence;
@Column(name = STACK_BINARY)
private byte[] stackBinary;
@ElasticSearch.EnableDocValues
@Column(name = IS_GO)
@BanyanDB.NoIndexing
private int isGo; // store as 0/1 for storage compatibility
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please use an enum in case there is further language. By defaullt, we could set it as Java.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@please change the field name as language type.


public enum Language {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should not use a public non-static enum. Please move this to a separate class.

JAVA(0),
GO(1);

private final int value;

Language(int value) {
this.value = value;
}

public int getValue() {
return value;
}

public static Language fromValue(int value) {
for (Language language : values()) {
if (language.value == value) {
return language;
}
}
return JAVA; // default to Java
}
}

public Language getLanguage() {
return Language.fromValue(isGo);
}

public void setLanguage(final Language language) {
this.isGo = language.getValue();
}

public boolean isGo() {
return isGo == Language.GO.getValue();
}

public void setGo(final boolean go) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not suitable for a new language in the future, please remove it.

this.isGo = go ? Language.GO.getValue() : Language.JAVA.getValue();
}

@Override
public StorageID id() {
Expand All @@ -88,6 +133,8 @@ public ProfileThreadSnapshotRecord storage2Entity(final Convert2Entity converter
snapshot.setSequence(((Number) converter.get(SEQUENCE)).intValue());
snapshot.setTimeBucket(((Number) converter.get(TIME_BUCKET)).intValue());
snapshot.setStackBinary(converter.getBytes(STACK_BINARY));
final Number isGoNum = (Number) converter.get(IS_GO);
snapshot.setLanguage(Language.fromValue(isGoNum != null ? isGoNum.intValue() : 0));
return snapshot;
}

Expand All @@ -99,6 +146,7 @@ public void entity2Storage(final ProfileThreadSnapshotRecord storageData, final
converter.accept(SEQUENCE, storageData.getSequence());
converter.accept(TIME_BUCKET, storageData.getTimeBucket());
converter.accept(STACK_BINARY, storageData.getStackBinary());
converter.accept(IS_GO, storageData.getLanguage().getValue());
}
}
}
Loading
Loading