> For the complete documentation index, see [llms.txt](https://note.onurbolatoglu.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://note.onurbolatoglu.com/loki/promtail-customize-and-pipeline.md).

# Promtail Customize & Pipeline

<figure><img src="/files/MHNm8GhEO8BPQn14uGc4" alt=""><figcaption></figcaption></figure>

Kubernetes üzerinde çalışan Promtail’in varsayılan konfigürasyon dosyası (`promtail.yaml`), base64 formatında saklandığı için önce decode edilerek ham içeriğine ulaşılabilir. Ardından, logları daha zengin etiketleyebilmek (örneğin `method` ve `code` gibi değerleri yakalamak) amacıyla ek `pipeline_stages` tanımlanarak, JSON içindeki belirli alanlar parse edilip Loki’ye label olarak gönderilebilir. Sonraki adımda, güncellenmiş `promtail.yaml` içeren bir Secret yeniden oluşturulup Promtail Pod’u yeniden başlatılarak, yeni konfigürasyonun devreye girmesi sağlanır.

<figure><img src="/files/huIkqVGn3TQHULajqJHm" alt=""><figcaption></figcaption></figure>

1. **Mevcut `promtail.yaml` Dosyasını Alma (Decode)**\
   Promtail yapılandırması varsayılan olarak, bir Secret içinde (örneğin `loki-promtail`) saklanır.

   ```bash
   kubectl get secret loki-promtail -o jsonpath="{.data.promtail\.yaml}" | base64 --decode > promtail.yaml
   ```

   Bu komut, base64 kodlu içeriği “promtail.yaml” dosyasına yazar. Böylece varsayılan veya mevcut Promtail yapılandırması düz metin (YAML) olarak düzenlenebilir hale gelir.
2. **Düzenleme: Loglardan Ek Verileri Label Olarak Çıkarmak**\
   `promtail.yaml` içindeki `scrape_configs` altında, **`pipeline_stages`** bölümüne `match` ve `json` gibi ek aşamalar eklenir.
   * **`match`** ile belirli bir label’e (örneğin `app="api"`) sahip logların ekstra işlem görmesi sağlanır.
   * Ardından iç içe **`json`** parse aşamaları kullanılarak log mesajından `code`, `method` gibi alanlar ayrıştırılır.
   * Son olarak **`labels:`** altında `code` ve `method` tanımlanır. Bu sayede Loki, bu alanları **label** olarak saklar ve Grafana’da etiket bazlı filtreleme yapmak mümkün hale gelir.
3. **Secret’ı Güncelleme**\
   Yeni “promtail.yaml” kaydedildikten sonra mevcut Secret silinir:

   ```bash
   kubectl delete secret loki-promtail
   ```

   Ardından aşağıdaki komutla yeniden oluşturulur:

   ```bash
   kubectl create secret generic loki-promtail --from-file=./promtail.yaml
   ```

   Böylece Promtail Pod’una yeni YAML konfigürasyonu enjekte edilir.<br>

   <figure><img src="/files/LxSrY8LcIHX3XOsp4W0m" alt=""><figcaption></figcaption></figure>
4. **Tüm Pod’ları Sırasıyla Yeniden Başlatma (Tek bir pod varsa direkt olarak delete yapabilirsiniz)**

   ```bash
   kubectl rollout restart ds/loki-promtail
   ```

   `loki-promtail` yerine kendi DaemonSet adınızı yazın (örn. `loki-promtail`, `promtail-daemonset` vs.).

   Bu komut, DaemonSet’in bağlı olduğu tüm Pod’ları sırasıyla silip tekrar oluşturur. Yeni Pod’lar ayağa kalkarken **güncellenmiş Secret**’tan `promtail.yaml` dosyasını okur.

   <figure><img src="/files/J0pusmKzckSS0t3ZTjg4" alt=""><figcaption></figcaption></figure>
5. **Sonuç: Yeni Etiketler (Labels)**\
   Grafana’daki **Explore** ekranında sorgu yaptığınızda, log satırlarının label kısmında `code` ve `method` gibi ek alanlar görünür. Bu sayede `code=200` gibi etiket bazlı filtrelerle loglara **daha hızlı ve verimli** ulaşılabilir.

**Kısacası**, bu yöntemle Promtail, log içindeki alanları **JSON** olarak parse edip **Loki’ye label** biçiminde aktarır. Böylece logları yalnızca metin bazlı aramak yerine, eklenen etiketlere göre de sorgulama yapılabilir (örneğin `method="GET"`, `code="200"`).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://note.onurbolatoglu.com/loki/promtail-customize-and-pipeline.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
