[{"content":" $ kubectl vesrion Client Version: v1.28.1 Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 configMapGenerator: - name: datadog-config options: disableNameSuffixHash: true literals: - DD_AGENT_HOST=status.hostIP replacements: - source: kind: ConfigMap name: datadog-config fieldPath: data.DD_AGENT_HOST targets: - select: kind: Deployment group: apps fieldPaths: - spec.template.spec.containers.*.env.[name=DD_AGENT_HOST].valueFrom.fieldRef.fieldPath options: create: true ","permalink":"https://hdykokd.me/posts/kustomize-embed-commonly-defined-fields/","title":"Kustomizeで共通で定義したいフィールドを埋め込む"},{"content":" References https://docs.datadoghq.com/metrics/custom_metrics/dogstatsd_metrics_submission/ Code import tracer from \u0026#39;dd-trace\u0026#39;; const hostname = process.env.DD_AGENT_HOST; const env = process.env.NODE_ENV; tracer.init({ env: env, hostname: hostname, dogstatsd: { hostname: hostname, }, service: \u0026#39;service\u0026#39;, tags: [`env:${env}`], } export default tracer; ","permalink":"https://hdykokd.me/posts/node.js%E3%81%A7dogstatsd%E3%81%ABcustom-metrics%E3%82%92%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B/","title":"Node.jsでDogStatsDにCustom Metricsを送信する"},{"content":"ログ収集の高度な構成\n複数行の自動検出は、以下の日付/時刻形式から始まり、それに準拠するログを検出します: RFC3339、ANSIC、Unix Date Format、Ruby Date Format、RFC822、RFC822Z、RFC850、RFC1123、RFC1123Z、RFC3339Nano、Java ロギング SimpleFormatter デフォルト日付書式。\n具体的な正規表現はこれ\n設定例 logs_config: auto_multi_line_detection: true auto_multi_line_extra_patterns: - \\d{4}\\-(0?[1-9]|1[012])\\-(0?[1-9]|[12][0-9]|3[01]) - \u0026#39;[A-Za-z_]+ \\d+, \\d+ \\d+:\\d+:\\d+ (AM|PM)\u0026#39; containers: agent: env: - name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_DETECTION value: \u0026#34;true\u0026#34; - name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_EXTRA_PATTERNS value: \u0026#39;^23-03.*\u0026#39; Goのlog packageの書式 2023/08/31 01:48:35 になる。これはDatadogのauto multineではサポートされていない書式。\nPatternを追加する - name: DD_LOGS_CONFIG_AUTO_MULTI_LINE_EXTRA_PATTERNS value: \u0026#39;\\d+/\\d+/\\d+ \\d+:\\d+:\\d+\u0026#39; logのformatを変更する https://stackoverflow.com/questions/26152993/go-logger-to-print-timestamp\nfunc Log(l *log.Logger, msg string) { l.SetPrefix(time.Now().Format(\u0026#34;2006-01-02 15:04:05\u0026#34;)) l.Print(msg) } ","permalink":"https://hdykokd.me/posts/datadog%E3%81%AEmulti-line-aggregation%E3%82%92%E6%A7%8B%E6%88%90%E3%81%99%E3%82%8B/","title":"DatadogのMulti-line aggregationを構成する"},{"content":" cd $GOPATH/bin \u0026amp;\u0026amp; ls -1 . | xargs -I{} go version -m {} | grep -oE \u0026#39;path\\s+(.*)\u0026#39; | awk \u0026#39;{ print $2 \u0026#34;@latest\u0026#34; }\u0026#39; ","permalink":"https://hdykokd.me/posts/go%E3%81%AE%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E3%81%AB%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9F%E3%83%90%E3%82%A4%E3%83%8A%E3%83%AA%E3%81%AE%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%82%92%E6%8A%BD%E5%87%BA%E3%81%99%E3%82%8B/","title":"Goのグローバルにインストールしたバイナリのリポジトリを抽出する"},{"content":"元ネタ: Macで特定アプリをアクティブにするホットキーを作ってみた | DevelopersIO\n同様のことをskhdで行っていたのだが、Raycastでできるならまとめてしまおうと思って試した。\n欲を言うと、iTerm2純正の（トグル操作の）ホットキーに比べるとレスポンスはちょっと遅いです。 純正の方は「押した瞬間に切り替わってる」レベルなのに対して、 こちらは「キーを離したら変わる」くらいの感覚です（適当）。 初回は特に遅くてちょっと待たされる感じがあるのですが、 何回か使っていると特に気にならないレベルのレスポンスになる印象です。\n自分もここが気になったのでレスポンスを改善したバージョンを作ってみた。\n起動している場合はfrontに持ってくる、起動していない場合はactivateとすることでレスポンスが早くなった。\n#!/usr/bin/osascript # Required parameters: # @raycast.schemaVersion 1 # @raycast.title Open Google Chrome # @raycast.mode silent # Optional parameters: # @raycast.icon # Documentation: # @raycast.author hdykokd # @raycast.authorURL https://raycast.com/hdykokd tell application \u0026#34;System Events\u0026#34; if exists process \u0026#34;Google Chrome\u0026#34; then tell process \u0026#34;Google Chrome\u0026#34; set frontmost to true end tell else tell application \u0026#34;Google Chrome\u0026#34; activate end tell end if end tell ","permalink":"https://hdykokd.me/posts/raycast-activating-a-specific-app-using-hotkey-in-macos/","title":"Macで特定のアプリをアクティブにするホットキー"},{"content":" Deployment apiVersion: apps/v1 kind: Deployment metadata: namespace: app name: server-a labels: app: server-a tags.datadoghq.com/env: environment tags.datadoghq.com/service: server-a tags.datadoghq.com/version: v1 spec: template: metadata: labels: app: server-a tags.datadoghq.com/env: environment tags.datadoghq.com/service: server-a tags.datadoghq.com/version: v1 annotations: ad.datadoghq.com/server-a.logs: \u0026#39;[{\u0026#34;source\u0026#34;:\u0026#34;mysource\u0026#34;,\u0026#34;service\u0026#34;:\u0026#34;server-a\u0026#34;}]\u0026#39; spec: containers: - name: server-a image: ... ... Cronjob apiVersion: batch/v1 kind: CronJob metadata: namespace: app name: cronjob-a labels: app: cronjob-a tags.datadoghq.com/env: environment tags.datadoghq.com/service: cronjob-a tags.datadoghq.com/version: v1 spec: jobTemplate: spec: template: metadata: labels: app: cronjob-a tags.datadoghq.com/service: cronjob-a tags.datadoghq.com/version: v1 annotations: ad.datadoghq.com/cronjob-a.logs: \u0026#39;[{\u0026#34;source\u0026#34;:\u0026#34;mysource\u0026#34;,\u0026#34;service\u0026#34;:\u0026#34;cronjob-a\u0026#34;}]\u0026#39; containers: - name: cronjob-a image: image:tag env: - name: DD_AGENT_HOST valueFrom: fieldRef: fieldPath: status.hostIP - name: DD_ENV valueFrom: fieldRef: fieldPath: metadata.labels[\u0026#39;tags.datadoghq.com/env\u0026#39;] - name: DD_SERVICE valueFrom: fieldRef: fieldPath: metadata.labels[\u0026#39;tags.datadoghq.com/service\u0026#39;] - name: DD_VERSION valueFrom: fieldRef: fieldPath: metadata.labels[\u0026#39;tags.datadoghq.com/version\u0026#39;] StatefulSet apiVersion: apps/v1 kind: StatefulSet metadata: name: statefulset-a namespace: app spec: serviceName: \u0026#39;statefulset-a\u0026#39; replicas: 1 selector: matchLabels: app: statefulset-a template: metadata: labels: app: statefulset-a tags.datadoghq.com/env: environment tags.datadoghq.com/service: statefulset-a tags.datadoghq.com/version: v1 annotations: ad.datadoghq.com/statefulset-a.logs: \u0026#39;[{\u0026#34;source\u0026#34;:\u0026#34;mysource\u0026#34;,\u0026#34;service\u0026#34;:\u0026#34;statefulset-a\u0026#34;}]\u0026#39; spec: ... ","permalink":"https://hdykokd.me/posts/datadog-kubernetes-manifest/","title":"DatadogのKubernetes manifestの設定"},{"content":" Datadog Agentのcontainerを起動する Datadog AgentがDogStatsDのデーモンも起動しているcontainerを立ち上げれば送信できるようになる。\nudp portを設定する。\ndocker pull datadog/agent:latest docker run --rm --name datadog-agent \\ -e DD_API_KEY=\u0026lt;YOUR_DATADOG_API_KEY\u0026gt; \\ -e DD_DOGSTATSD_NON_LOCAL_TRAFFIC=true \\ -p 8125:8125/udp \\ datadog/agent:latest Standaloneで立ち上げることもできるみたい。\nGitHub - DataDog/docker-dd-agent: Datadog Agent Dockerfile for Trusted Builds.\nReferences DogStatsD ","permalink":"https://hdykokd.me/posts/datadog-send-custom-metrics-to-dogstatsd-in-datadog-agent/","title":"Datadog Agent(Docker)にCustom Metricsを送信できるようにする"},{"content":"Tracing Docker Applications\ndocker run --rm --name dd-agent --cgroupns host --pid host \\ -v /var/run/docker.sock:/var/run/docker.sock:ro \\ -v /proc/:/host/proc/:ro \\ -v /sys/fs/cgroup/:/host/sys/fs/cgroup:ro \\ -p 127.0.0.1:8126:8126/tcp \\ -e DD_APM_ENABLED=true \\ -e DD_SITE=\u0026lt;region\u0026gt;.datadoghq.com \\ -e DD_API_KEY=\u0026lt;api_key\u0026gt; \\ gcr.io/datadoghq/agent:latest ","permalink":"https://hdykokd.me/posts/datadog-dd-agent-with-docker-and-trace-host-application/","title":"Datadog Agentでホストのアプリケーションをtraceする"},{"content":" Installation go get gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer go get gopkg.in/DataDog/dd-trace-go.v1/profiler Start tracer // \u0026#34;gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer\u0026#34; tracer.Start( tracer.WithHostname(os.Getenv(\u0026#34;DD_AGENT_HOST\u0026#34;)), tracer.WithService(\u0026#34;service-a\u0026#34;), tracer.WithEnv(\u0026#34;environment\u0026#34;), ) defer tracer.Stop() Setup Middleware go-chi/chi // \u0026#34;github.com/go-chi/chi/v5\u0026#34; // \u0026#34;github.com/go-chi/chi/v5/middleware\u0026#34; // chitrace \u0026#34;gopkg.in/DataDog/dd-trace-go.v1/contrib/go-chi/chi.v5\u0026#34; r := chi.NewRouter() r.Use(chitrace.Middleware(chitrace.WithServiceName(\u0026#34;service-a\u0026#34;))) Start Datadog Agent Datadog Agentでホストのアプリケーションをtraceする\nReferences Tracing Go Applications GitHub - DataDog/dd-trace-go: Datadog Go Library including APM tracing, profiling, and security monitoring. ","permalink":"https://hdykokd.me/posts/setting-up-datadog-dd-trace-in-go/","title":"Goでdd-traceを設定する"},{"content":" References https://docs.datadoghq.com/metrics/custom_metrics/dogstatsd_metrics_submission/ Code var Dogstatsd *statsd.Client func InitializeDogstatsd(host string, port string, env string, options ...statsd.Option) { if host == \u0026#34;\u0026#34; \u0026amp;\u0026amp; env == \u0026#34;development\u0026#34; { host = \u0026#34;127.0.0.1\u0026#34; } tags := []string{ \u0026#34;env:\u0026#34; + env, } options = append(options, statsd.WithTags(tags)) addr := host + \u0026#34;:\u0026#34; + port statsd, err := statsd.New(addr, options...) if err != nil { log.Fatalf(\u0026#34;failed to initialize statsd client: %s\u0026#34;, err) } Dogstatsd = statsd } ","permalink":"https://hdykokd.me/posts/datadog-custom-metrics-go/","title":"GoでDogStatsDにCustom Metricsを送信する"},{"content":" Installation pnpm add dd-trace --save tracerを起動する import tracer from \u0026#39;dd-trace\u0026#39;; tracer.init({ env: process.env.NODE_ENV, hostname: process.env.DD_AGENT_HOST, service: \u0026#39;server\u0026#39;, }); export default tracer; このスクリプトをserverのentrypointでimportする。\nReferences Tracing Node.js Applications GitHub - DataDog/dd-trace-js: JavaScript APM Tracer ","permalink":"https://hdykokd.me/posts/setting-up-datadog-dd-trace-in-nodejs/","title":"Node.jsでdd-traceを設定する"},{"content":"Dockerコンテナで動くGoアプリをDelveを使ってデバッグできるようにするのが色々と苦戦したのでメモ。\nDelveを使う。\nDockerfile FROM golang:1.19 WORKDIR /app RUN go install github.com/go-delve/delve/cmd/dlv@latest CMD [\u0026#34;dlv\u0026#34;, \u0026#34;debug\u0026#34;, \u0026#34;./main.go\u0026#34;, \u0026#34;--listen=:2345\u0026#34;, \u0026#34;--headless\u0026#34;, \u0026#34;--api-version=2\u0026#34;, \u0026#34;--continue\u0026#34;, \u0026#34;--accept-multiclient\u0026#34;] Delve --api-version=2 --continue --accept-multiclient Docker Compomse version: \u0026#39;3\u0026#39; services: golang-docker: init: true build: context: ./ dockerfile: ./Dockerfile security_opt: - seccomp:unconfined volumes: - server-a-go-mod:/go/pkg/mod - server-a-go-build:/root/.cache/go-build ports: - \u0026#39;2345:2345\u0026#39; security_opt seccomp:undefined launch.json { \u0026#34;version\u0026#34;: \u0026#34;0.2.0\u0026#34;, \u0026#34;configurations\u0026#34;: [ { \u0026#34;name\u0026#34;: \u0026#34;Connect to server\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;go\u0026#34;, \u0026#34;request\u0026#34;: \u0026#34;attach\u0026#34;, \u0026#34;mode\u0026#34;: \u0026#34;remote\u0026#34;, \u0026#34;port\u0026#34;: 2345, \u0026#34;host\u0026#34;: \u0026#34;127.0.0.1\u0026#34;, \u0026#34;substitutePath\u0026#34;: [ { \u0026#34;from\u0026#34;: \u0026#34;${workspaceFolder}\u0026#34;, \u0026#34;to\u0026#34;: \u0026#34;/app\u0026#34; }, { \u0026#34;from\u0026#34;: \u0026#34;${env:GOPATH}\u0026#34;, \u0026#34;to\u0026#34;: \u0026#34;/go\u0026#34; }, { \u0026#34;from\u0026#34;: \u0026#34;${env:GOROOT}\u0026#34;, \u0026#34;to\u0026#34;: \u0026#34;/usr/local/go\u0026#34; } ] } } ","permalink":"https://hdykokd.me/posts/setting-up-debugger-for-go-server-in-docker/","title":"Docketコンテナ内で動くGoのサーバーにデバッガを設定する"}]