Skip to content

Commit

Permalink
log trace_pipe only when debug mode
Browse files Browse the repository at this point in the history
  • Loading branch information
keisku committed Apr 23, 2024
1 parent 2424faf commit efa27f4
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 32 deletions.
32 changes: 0 additions & 32 deletions ebpf/gmon.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
package ebpf

import (
"bufio"
"context"
"errors"
"fmt"
"io/fs"
"log/slog"
"os"
"strings"

"github.com/cilium/ebpf"
"github.com/cilium/ebpf/link"
Expand All @@ -28,7 +24,6 @@ func Run(ctx context.Context, config Config) (func(), error) {
if err != nil {
return func() {}, err
}
go logTracePipe(ctx.Done())
ex, err := link.OpenExecutable(config.binPath)
if err != nil {
return func() {}, err
Expand Down Expand Up @@ -117,30 +112,3 @@ func linkUprobe(
slog.Debug("attach uprobe with address", slog.String("symbol", symbol), slog.String("address", fmt.Sprintf("%#x", address)))
return l, nil
}

func logTracePipe(done <-chan struct{}) {
tracePipe, err := os.Open("/sys/kernel/debug/tracing/trace_pipe")
if err != nil {
slog.Error("open trace_pipe", slog.Any("error", err))
return
}
defer tracePipe.Close()

go func() {
// Create a bufio.Scanner to read the trace data.
scanner := bufio.NewScanner(tracePipe)
// Read and print the trace data.
for scanner.Scan() {
msg := strings.TrimSpace(scanner.Text())
if strings.Contains(msg, "gmon") {
slog.Warn(msg)
}
}
if err := scanner.Err(); err != nil {
if !errors.Is(err, fs.ErrClosed) {
slog.Error("read trace_pipe", slog.Any("error", err))
}
}
}()
<-done
}
32 changes: 32 additions & 0 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package main

import (
"bufio"
"context"
"errors"
"flag"
"fmt"
"io/fs"
"log"
"log/slog"
"net/http"
Expand All @@ -12,6 +15,7 @@ import (
"os/signal"
"runtime"
"runtime/trace"
"strings"

"github.com/cilium/ebpf/rlimit"
"github.com/keisku/gmon/ebpf"
Expand Down Expand Up @@ -96,6 +100,9 @@ func main() {
if err != nil {
errlog.Fatalln(err)
}
if levelMap[*level] == slog.LevelDebug {
go logTracePipe(ctx.Done())
}
if 1023 < *pprofPort {
go func() {
_ = http.ListenAndServe(fmt.Sprintf("127.0.0.1:%d", pprofPort), nil)
Expand All @@ -105,3 +112,28 @@ func main() {
slog.Debug("gmon exits")
eBPFClose()
}

func logTracePipe(done <-chan struct{}) {
tracePipe, err := os.Open("/sys/kernel/debug/tracing/trace_pipe")
if err != nil {
slog.Error("open trace_pipe", slog.Any("error", err))
return
}
defer tracePipe.Close()

go func() {
scanner := bufio.NewScanner(tracePipe)
for scanner.Scan() {
msg := strings.TrimSpace(scanner.Text())
if strings.Contains(msg, "gmon") {
slog.Debug(msg)
}
}
if err := scanner.Err(); err != nil {
if !errors.Is(err, fs.ErrClosed) {
slog.Error("read trace_pipe", slog.Any("error", err))
}
}
}()
<-done
}

0 comments on commit efa27f4

Please sign in to comment.