모든 게시물

  • Published on
    My system exports telemetry data from a Node.js application using OpenTelemetry. I configured the OpenTelemetry Collector to send that data to a GCP-managed service via the Google Cloud Exporter. Later, while reviewing database query information from the application, I noticed something odd in the trace data. As I dug deeper, I discovered some limitations of GCP Cloud Trace and how the mysql2 instrumentation package sets attribute values. That investigation helped explain the strange behavior I was seeing in the trace data.
  • Published on
    This time, I integrated Sentry with Keycloak. There are several helpful blog posts available that make the process easy to follow. However, out of curiosity, I wanted to understand exactly what was happening behind the scenes—and clarify which steps are truly necessary.
  • Published on
    I often write values.yaml files to install open-source projects on Kubernetes clusters. This time, I needed to add tolerations to ensure all components of Sentry would run on specific nodes. Since Sentry has quite a few components, I decided to leverage Gemini to generate the values.yaml file more quickly.
  • Published on
    I needed to iterate through all image repositories in my private container registry, find the latest build for each, and save them as individual tar files. Although an LLM can generate code for this task quickly, it's worth knowing how to issue an authentication token for the Docker API. This could be important for guiding the LLM to produce a correct final version.
  • Published on
    I needed to set up a self-hosted Git system and was looking for an open-source tool that would fit my requirements. Gitea seemed like a great fit, and I was particularly interested in Gitea Actions, which is compatible with GitHub Actions. However, I struggled to correctly configure a Gitea Actions runner to use a container image from a private repository. Through that process, I gained a much better understanding of how Gitea offers a CI/CD system compatible with GitHub Actions. In this post, I'll share what I learned.
  • Published on
    I recently had the valuable opportunity to experience building a Flutter application from scratch using Gemini CLI at my company's one-day AI hackathon. It was an insightful experience to understand vibe coding firsthand. This also gave me thoughts on what skills I need to continue developing in the AI era.
  • Published on
    HTTP 요청은 서버에서 Location Header를 통해서 HTTPS를 Redirection을 하고 있다. 그런데 방화벽에 의해서 80번 포트는 막혀있어서 http 요청은 timeout이 발생하고 있다. 그런 상황에서 브라우저에서 http로 요청을 하면 정상적으로 https redirection이 되어서 해당 도메인으로 정상적으로 접속이 가능하다. 방화벽에 막혀서 80번 포트에 대해서 정상적으로 응답을 못 받는데, 어떻게 브라우저에서는 http로 접근이 가능한 것이지? 이에 대한 질문에 대해서 HSTS의 존재와 역할을 이해하면 답을 할 수 있다. 이번 글에서는 간단하게 HSTS를 살펴본다.
  • Published on
    GCP의 관리형 데이터베이스 서비스인 SQL의 User를 관리할 때, 제약사항이 없다면 IAM 인증을 활용하는 것을 고려하자. Google Workspace를 사용하고 있다면, 이미 생성된 구글 이메일 계정과 Group을 통해서 데이터베이스 접속 권한을 제어할 수 있다. 데이터베이스 User를 비밀번호 인증으로 생성하여 관리하는 대신에, 구글 계정으로 인증하여 데이터베이스를 접속할 수 있도록 관리하자. 이번 글에서는 IAM 인증을 위한 설정 방법을 설명한다.
  • Published on
    OpenTelemetry Collector를 사용할 때, 다양한 exporter를 통해서 Telemetry data를 저장할 수 있다. GCP를 사용하는 경우에는 Google Cloud Exporter를 사용해서 Telemetry data를 쉽게 저장할 수 있다. 그런데 Log의 경우에는 내가 설정한 Resource attribute가 기대한 것처럼 Google Cloud Logging의 Label에 등록되지 않는 경우를 경험할 수도 있다. 따라서 오늘은 Google Cloud Exporter를 사용할 때, Resource Attribute들이 Cloud Logging Label로 어떻게 변환되는지 자세히 설명한다.
  • Published on
    OpenTelemetry Operator로 Auto-Instrumentation을 주입할 수 있다. 그런데 환경변수 설정을 올바르게 하지 않거나 OpenTelemetry Collector에서 proccessor 설정을 제대로 해주지 않으면, Resource attribute중 k8s.namespace.name가 빈문자열로 보내질 수 있다. 이러한 경우에 Auto-Instrumentation에서 Resource attribute가 어떻게 자동으로 설정되는지 resourceDetector들을 이해하면 쉽게 해결할 수 있다. 따라서 이번 글에서는 Resource Detector들에 대해서 자세히 살펴본다.