高薪招聘远程Golang监控/指标服务开发工程师(经验丰富者优先)

高薪招聘远程Golang监控/指标服务开发工程师(经验丰富者优先) 商业服务与技术有限公司 是一家 SAP 服务和解决方案提供商,SAP 认证合作伙伴,主要业务包括 SAP 商业信息系统实施、IT 基础设施服务、信息安全解决方案和项目管理。我们在保加利亚及全球范围内(几乎涵盖所有欧洲国家、美国和拉丁美洲)开展自己的实施项目。

随着业务扩展,我们目前正在寻找经验丰富的 GoLang 开发人员加入我们公司。 您将加入全球最大科技公司之一的国际团队。

期望与任务:

  • 开发概念验证,并围绕使用 OpenTelemetry 和 SAP 内部现有服务传播遥测数据进一步演进。这包括协调现有工具和服务。
  • 基于 Cortex/Prometheus 开发高可扩展的监控/指标服务。
  • 在国际团队中工作。
  • 具备出色的英语书面和口语沟通能力。

要求:

  • 深厚的 GoLang 开发经验
  • 熟悉至少一种云解决方案,例如 Amazon、Azure、Google
  • 具备 容器和编排平台 经验(Docker、Kubernetes 或其他)
  • Bash 脚本技能,至少精通一种编程语言,并愿意学习新语言
  • 具备可观测性、监控、日志系统(例如 Prometheus、ELK、Loki)的实践经验
  • 精通 Git
  • 强大的问题解决能力,能够深入代码层面

BST 提供:

  • 极具竞争力的薪酬待遇
  • 可在索非亚办公室或远程工作

如果您有兴趣加入我们的团队,请立即将您的英文简历发送至 jobs@bst.bg


更多关于高薪招聘远程Golang监控/指标服务开发工程师(经验丰富者优先)的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

你好,

我可以帮助你。 如需进一步详细讨论,请通过Skype联系我:live:lauren_8606。

谢谢, Lauren

更多关于高薪招聘远程Golang监控/指标服务开发工程师(经验丰富者优先)的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


你好, 希望你一切顺利。

我很乐意在这个绝佳的机会中为你提供帮助。 请将你的详细信息发送到我的邮箱 Vanessa@cisinlabs.com。 我希望就相关需求进行进一步的讨论。

期待收到你的积极回复。

此致, Vanessa

这是一个非常专业的Go语言监控/指标服务开发职位,技术要求明确且具有挑战性。以下是对该职位技术栈和潜在工作内容的专业分析,并附上相关示例代码。

1. 基于Cortex/Prometheus开发高可扩展监控服务

这是核心任务之一。Cortex是Prometheus的横向扩展版本,通常使用Go进行开发扩展。

// 示例:使用Prometheus Go客户端库暴露自定义指标
package main

import (
    "net/http"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    // 定义自定义指标
    httpRequestsTotal = prometheus.NewCounterVec(
        prometheus.CounterOpts{
            Name: "http_requests_total",
            Help: "Total number of HTTP requests",
        },
        []string{"method", "endpoint"},
    )
    
    requestDuration = prometheus.NewHistogramVec(
        prometheus.HistogramOpts{
            Name:    "http_request_duration_seconds",
            Help:    "Duration of HTTP requests",
            Buckets: prometheus.DefBuckets,
        },
        []string{"method", "endpoint"},
    )
)

func init() {
    // 注册指标
    prometheus.MustRegister(httpRequestsTotal)
    prometheus.MustRegister(requestDuration)
}

func main() {
    // 业务处理函数
    http.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
        timer := prometheus.NewTimer(requestDuration.WithLabelValues(r.Method, r.URL.Path))
        defer timer.ObserveDuration()
        
        httpRequestsTotal.WithLabelValues(r.Method, r.URL.Path).Inc()
        
        w.Write([]byte("API Response"))
    })
    
    // 暴露Prometheus指标端点
    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":8080", nil)
}

2. OpenTelemetry遥测数据传播

OpenTelemetry是云原生可观测性的标准,Go语言有完整的SDK支持。

// 示例:使用OpenTelemetry Go SDK进行分布式追踪
package main

import (
    "context"
    "go.opentelemetry.io/otel"
    "go.opentelemetry.io/otel/exporters/jaeger"
    "go.opentelemetry.io/otel/sdk/resource"
    sdktrace "go.opentelemetry.io/otel/sdk/trace"
    semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
    "go.opentelemetry.io/otel/trace"
)

func setupTracer() (*sdktrace.TracerProvider, error) {
    // 创建Jaeger导出器
    exp, err := jaeger.New(jaeger.WithCollectorEndpoint(
        jaeger.WithEndpoint("http://jaeger:14268/api/traces"),
    ))
    if err != nil {
        return nil, err
    }
    
    // 配置Tracer Provider
    tp := sdktrace.NewTracerProvider(
        sdktrace.WithBatcher(exp),
        sdktrace.WithResource(resource.NewWithAttributes(
            semconv.SchemaURL,
            semconv.ServiceNameKey.String("monitoring-service"),
            semconv.ServiceVersionKey.String("1.0.0"),
        )),
    )
    
    otel.SetTracerProvider(tp)
    return tp, nil
}

func businessOperation(ctx context.Context) {
    tracer := otel.Tracer("monitoring-service")
    
    // 创建Span
    ctx, span := tracer.Start(ctx, "business-operation")
    defer span.End()
    
    // 添加Span属性
    span.SetAttributes(
        semconv.ServiceInstanceIDKey.String("instance-1"),
        semconv.HTTPMethodKey.String("GET"),
    )
    
    // 业务逻辑...
}

3. Kubernetes环境下的Go服务部署

职位要求容器和编排平台经验,以下是Go服务在K8s中的典型配置:

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: monitoring-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: monitoring-service
  template:
    metadata:
      labels:
        app: monitoring-service
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "8080"
        prometheus.io/path: "/metrics"
    spec:
      containers:
      - name: monitoring-service
        image: bst/monitoring-service:latest
        ports:
        - containerPort: 8080
        env:
        - name: OTEL_EXPORTER_JAEGER_ENDPOINT
          value: "http://jaeger-collector:14268/api/traces"
        - name: PROMETHEUS_ENDPOINT
          value: "http://prometheus:9090"
        resources:
          requests:
            memory: "128Mi"
            cpu: "100m"
          limits:
            memory: "256Mi"
            cpu: "200m"
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10

4. 与SAP服务集成

考虑到公司是SAP合作伙伴,可能需要与SAP系统集成:

// 示例:监控SAP服务指标的Go客户端
package main

import (
    "encoding/json"
    "fmt"
    "time"
    "github.com/prometheus/client_golang/prometheus"
)

type SAPMetric struct {
    SystemID     string    `json:"system_id"`
    ResponseTime float64   `json:"response_time"`
    ErrorRate    float64   `json:"error_rate"`
    Timestamp    time.Time `json:"timestamp"`
}

var (
    sapResponseTime = prometheus.NewGaugeVec(
        prometheus.GaugeOpts{
            Name: "sap_response_time_seconds",
            Help: "SAP system response time",
        },
        []string{"system_id"},
    )
    
    sapErrorRate = prometheus.NewGaugeVec(
        prometheus.GaugeOpts{
            Name: "sap_error_rate",
            Help: "SAP system error rate",
        },
        []string{"system_id"},
    )
)

func collectSAPMetrics(sapEndpoint string) {
    // 模拟从SAP系统收集指标
    metric := SAPMetric{
        SystemID:     "SAP_PRD",
        ResponseTime: 0.85,
        ErrorRate:    0.01,
        Timestamp:    time.Now(),
    }
    
    // 更新Prometheus指标
    sapResponseTime.WithLabelValues(metric.SystemID).Set(metric.ResponseTime)
    sapErrorRate.WithLabelValues(metric.SystemID).Set(metric.ErrorRate)
    
    // 将指标数据转换为OpenTelemetry格式
    exportToOpenTelemetry(metric)
}

func exportToOpenTelemetry(metric SAPMetric) {
    // 使用OpenTelemetry导出SAP指标
    // 这里可以集成到现有的OpenTelemetry管道中
}

5. 性能优化和可扩展性考虑

对于高可扩展监控服务,需要考虑以下Go实现:

// 示例:使用并发处理提高指标收集性能
package main

import (
    "context"
    "sync"
    "time"
    "go.uber.org/ratelimit"
)

type MetricCollector struct {
    workers    int
    rateLimit  ratelimit.Limiter
    metricsChan chan Metric
}

func NewMetricCollector(workers int, rps int) *MetricCollector {
    return &MetricCollector{
        workers:    workers,
        rateLimit:  ratelimit.New(rps),
        metricsChan: make(chan Metric, 1000),
    }
}

func (mc *MetricCollector) Start(ctx context.Context) {
    var wg sync.WaitGroup
    
    for i := 0; i < mc.workers; i++ {
        wg.Add(1)
        go func(workerID int) {
            defer wg.Done()
            mc.worker(ctx, workerID)
        }(i)
    }
    
    wg.Wait()
}

func (mc *MetricCollector) worker(ctx context.Context, workerID int) {
    for {
        select {
        case <-ctx.Done():
            return
        case metric := <-mc.metricsChan:
            mc.rateLimit.Take()
            processMetric(metric)
        }
    }
}

func processMetric(metric Metric) {
    // 指标处理逻辑
    // 包括验证、转换、存储到Prometheus/Cortex
}

这个职位需要深入理解Go语言并发模型、性能优化、云原生监控栈(Prometheus/Cortex/OpenTelemetry),以及容器化部署。示例代码展示了在这些技术栈中Go语言的实际应用方式。

回到顶部