高薪招聘远程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
你好,
我可以帮助你。 如需进一步详细讨论,请通过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语言的实际应用方式。

