{"id":37281,"date":"2025-12-29T21:30:46","date_gmt":"2025-12-29T18:30:46","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/"},"modified":"2025-12-29T21:30:46","modified_gmt":"2025-12-29T18:30:46","slug":"spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/","title":{"rendered":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131"},"content":{"rendered":"<h2>Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131<\/h2>\n<p>G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda veriler, ki\u015fisel al\u0131\u015fkanl\u0131klar\u0131m\u0131zdan profesyonel i\u015f s\u00fcre\u00e7lerimize kadar her alanda karar alma mekanizmalar\u0131m\u0131z\u0131 \u015fekillendiriyor. M\u00fczik dinleme al\u0131\u015fkanl\u0131klar\u0131m\u0131z da bu durumdan nasibini al\u0131yor. Spotify gibi platformlarda ge\u00e7irdi\u011fimiz zaman\u0131, dinledi\u011fimiz \u015fark\u0131lar\u0131, sanat\u00e7\u0131lar\u0131 ve t\u00fcrleri detayl\u0131 bir \u015fekilde analiz etmek, hem ki\u015fisel ke\u015fifler hem de i\u00e7erik \u00fcreticileri i\u00e7in de\u011ferli i\u00e7g\u00f6r\u00fcler sunabilir. Bu makalede, Spotify metriklerini Docker, Prometheus ve Grafana \u00fc\u00e7l\u00fcs\u00fcyle nas\u0131l izleyece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frenecek, kendi ki\u015fisel m\u00fczik analizi panelinizi olu\u015fturman\u0131n keyfini \u00e7\u0131karacaks\u0131n\u0131z.<\/p>\n<h3>Neden Spotify Metriklerini \u0130zlemeliyiz?<\/h3>\n<p>Spotify, d\u00fcnya genelinde milyonlarca kullan\u0131c\u0131n\u0131n m\u00fczik dinleme deneyimini \u015fekillendiren lider bir platformdur. Bu platformdaki aktivitelerinizi izlemek, size ve hatta bir sanat\u00e7\u0131 veya i\u00e7erik \u00fcreticisiyseniz kitlenize dair derinlemesine bilgiler sa\u011flayabilir.<\/p>\n<h4>Ki\u015fisel Dinleme Al\u0131\u015fkanl\u0131klar\u0131<\/h4>\n<p>Kendi dinleme ge\u00e7mi\u015finizi analiz ederek, en \u00e7ok hangi t\u00fcrleri sevdi\u011finizi, hangi sanat\u00e7\u0131lar\u0131 tekrar tekrar dinledi\u011finizi veya g\u00fcn\u00fcn hangi saatlerinde daha aktif oldu\u011funuzu ke\u015ffedebilirsiniz. Bu, yeni m\u00fczikler ke\u015ffetme ve m\u00fczik zevkinizi daha iyi anlama konusunda size rehberlik edebilir. \u00d6rne\u011fin, haftal\u0131k dinleme s\u00fcrelerinizin grafiklerini g\u00f6rmek, m\u00fczikle olan ili\u015fkinizi daha somut hale getirebilir.<\/p>\n<h4>Sanat\u00e7\u0131 ve \u0130\u00e7erik \u00dcreticileri \u0130\u00e7in Veri Analizi<\/h4>\n<p>E\u011fer bir sanat\u00e7\u0131, podcast yay\u0131nc\u0131s\u0131 veya m\u00fczikle ilgili i\u00e7erik \u00fcreten biriyseniz, kendi eserlerinizin Spotify&#8217;daki performans\u0131n\u0131 izlemek hayati \u00f6nem ta\u015f\u0131r. \u015eark\u0131lar\u0131n\u0131z\u0131n dinlenme say\u0131lar\u0131, co\u011frafi da\u011f\u0131l\u0131m\u0131, hangi \u00e7alma listelerinde yer ald\u0131\u011f\u0131 gibi metrikler, pazarlama stratejilerinizi geli\u015ftirmenize, yeni i\u00e7erik fikirleri bulman\u0131za ve hedef kitlenizi daha iyi tan\u0131man\u0131za yard\u0131mc\u0131 olur. Hangi \u015fark\u0131n\u0131n hangi d\u00f6nemde pop\u00fcler oldu\u011funu g\u00f6rmek, gelecekteki prod\u00fcksiyon kararlar\u0131n\u0131z\u0131 etkileyebilir.<\/p>\n<h4>Trendleri ve Performans\u0131 Anlama<\/h4>\n<p>Spotify metrikleri sadece ge\u00e7mi\u015fi de\u011fil, gelece\u011fi de anlaman\u0131za yard\u0131mc\u0131 olabilir. Belirli bir \u015fark\u0131n\u0131n veya sanat\u00e7\u0131n\u0131n pop\u00fclaritesindeki art\u0131\u015f veya azal\u0131\u015f trendlerini izleyerek, m\u00fczik end\u00fcstrisindeki genel de\u011fi\u015fimleri veya kendi i\u00e7eri\u011finizin performans\u0131ndaki ani s\u0131\u00e7ramalar\u0131 yakalayabilirsiniz. Bu, \u00f6zellikle h\u0131zl\u0131 tepki vermeniz gereken durumlarda (\u00f6rne\u011fin, viral olan bir i\u00e7eri\u011fi desteklemek) kritik \u00f6neme sahiptir.<\/p>\n<h3>Gerekli Ara\u00e7lar ve Teknolojiler<\/h3>\n<p>Bu projeyi hayata ge\u00e7irmek i\u00e7in modern ve g\u00fc\u00e7l\u00fc baz\u0131 ara\u00e7lara ihtiyac\u0131m\u0131z olacak. Hepsi a\u00e7\u0131k kaynakl\u0131 ve topluluk taraf\u0131ndan desteklenen bu ara\u00e7lar, veri toplama, depolama ve g\u00f6rselle\u015ftirme konusunda end\u00fcstri standartlar\u0131n\u0131 belirliyor.<\/p>\n<h4>Docker: Konteynerle\u015ftirmenin G\u00fcc\u00fc<\/h4>\n<p>Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir &#8220;konteynerler&#8221; i\u00e7inde paketlemeyi sa\u011flayan bir platformdur. Bu sayede, farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) uygulamalar\u0131n\u0131z\u0131n tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti edersiniz. Prometheus, Grafana ve \u00f6zel Spotify veri toplay\u0131c\u0131m\u0131z\u0131 Docker konteynerleri i\u00e7inde \u00e7al\u0131\u015ft\u0131rarak kurulumu basitle\u015ftirecek ve olas\u0131 ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nleyece\u011fiz.<\/p>\n<h4>Prometheus: Metrik Toplama ve Depolama<\/h4>\n<p>Prometheus, zaman serisi verilerini (metrikleri) toplamak ve depolamak i\u00e7in tasarlanm\u0131\u015f g\u00fc\u00e7l\u00fc bir a\u00e7\u0131k kaynakl\u0131 izleme sistemidir. Hedeflerden HTTP \u00fczerinden metrikleri \u00e7eker (pull modeli) ve bu metrikleri kendi veritaban\u0131nda saklar. Esnek sorgu dili PromQL sayesinde, toplanan veriler \u00fczerinde karma\u015f\u0131k analizler yapabiliriz. Bizim senaryomuzda, \u00f6zel olarak yazaca\u011f\u0131m\u0131z Spotify veri toplay\u0131c\u0131m\u0131zdan metrikleri \u00e7ekecek.<\/p>\n<h4>Grafana: Veri G\u00f6rselle\u015ftirme \u015e\u00f6leni<\/h4>\n<p>Grafana, \u00e7e\u015fitli veri kaynaklar\u0131ndan (Prometheus dahil) al\u0131nan metrikleri g\u00f6rselle\u015ftirmek i\u00e7in kullan\u0131lan pop\u00fcler bir a\u00e7\u0131k kaynakl\u0131 analitik ve izleme platformudur. Esnek dashboard&#8217;lar olu\u015fturma, farkl\u0131 grafik t\u00fcrleri kullanma ve verileri etkile\u015fimli bir \u015fekilde sunma yetene\u011fi sayesinde, Spotify metriklerimizi anla\u015f\u0131l\u0131r ve estetik bir bi\u00e7imde g\u00f6zlemleyebilece\u011fiz. Grafana&#8217;n\u0131n zengin \u015fablonlama ve de\u011fi\u015fken \u00f6zellikleri, dinamik paneller olu\u015fturmam\u0131za olanak tan\u0131r.<\/p>\n<h4>Spotify Web API: Veri Kayna\u011f\u0131m\u0131z<\/h4>\n<p>Spotify Web API, Spotify&#8217;\u0131n sundu\u011fu zengin verilere programatik olarak eri\u015fmemizi sa\u011flayan bir RESTful API&#8217;dir. Kullan\u0131c\u0131n\u0131n dinleme ge\u00e7mi\u015fi, \u00e7alma listeleri, sanat\u00e7\u0131 bilgileri, \u015fark\u0131 detaylar\u0131 gibi bir\u00e7ok bilgiye bu API \u00fczerinden ula\u015fabiliriz. Kendi uygulamam\u0131z\u0131 geli\u015ftirerek bu API&#8217;den veri \u00e7ekecek ve Prometheus&#8217;un anlayaca\u011f\u0131 bir formata d\u00f6n\u00fc\u015ft\u00fcrece\u011fiz. API eri\u015fimi i\u00e7in Spotify Developer hesab\u0131na ihtiyac\u0131m\u0131z olacak.<\/p>\n<h3>Spotify Web API Entegrasyonu ve Veri Toplama<\/h3>\n<p>Spotify metriklerini Prometheus&#8217;a g\u00f6ndermenin ilk ad\u0131m\u0131, Spotify Web API&#8217;den veri \u00e7ekmektir. Bu i\u015flem i\u00e7in bir geli\u015ftirici hesab\u0131 olu\u015fturmam\u0131z ve bir uygulama kaydetmemiz gerekecek.<\/p>\n<h4>Spotify Developer Hesab\u0131 Olu\u015fturma ve Uygulama Kayd\u0131<\/h4>\n<p>1.  <strong>Spotify Developer Paneline Gitme:<\/strong> Bir web taray\u0131c\u0131s\u0131 \u00fczerinden <code>developer.spotify.com<\/code> adresine gidin.<br \/>\n2.  <strong>Giri\u015f Yapma\/Kaydolma:<\/strong> Mevcut Spotify hesab\u0131n\u0131zla giri\u015f yap\u0131n veya yeni bir hesap olu\u015fturun.<br \/>\n3.  <strong>Uygulama Olu\u015fturma:<\/strong> &#8220;Dashboard&#8221; sayfas\u0131nda &#8220;Create an app&#8221; butonuna t\u0131klay\u0131n. Uygulaman\u0131za bir isim ve a\u00e7\u0131klama verin. Bu uygulama, API&#8217;ye eri\u015fim i\u00e7in kullan\u0131lacak kimlik bilgilerinizi (Client ID ve Client Secret) sa\u011flayacakt\u0131r.<br \/>\n4.  <strong>Redirect URI Ayar\u0131:<\/strong> Uygulaman\u0131z\u0131n ayarlar\u0131ndan &#8220;Edit Settings&#8221; b\u00f6l\u00fcm\u00fcne gidin. &#8220;Redirect URIs&#8221; k\u0131sm\u0131na <code>http:\/\/localhost:8888\/callback<\/code> (veya kendi belirledi\u011finiz bir port ve yol) ekleyin. Bu URI, OAuth ak\u0131\u015f\u0131 s\u0131ras\u0131nda Spotify&#8217;\u0131n yetkilendirme kodunu geri g\u00f6nderece\u011fi adrestir.<\/p>\n<h4>OAuth 2.0 Ak\u0131\u015f\u0131 ve Eri\u015fim Tokenlar\u0131<\/h4>\n<p>Spotify Web API, kullan\u0131c\u0131 verilerine eri\u015fim i\u00e7in OAuth 2.0 yetkilendirme \u00e7er\u00e7evesini kullan\u0131r. Bu, uygulaman\u0131z\u0131n kullan\u0131c\u0131n\u0131n izni olmadan verilere eri\u015femeyece\u011fi anlam\u0131na gelir. Temel ad\u0131mlar \u015funlard\u0131r:<\/p>\n<p>1.  <strong>Yetkilendirme \u0130ste\u011fi:<\/strong> Kullan\u0131c\u0131y\u0131 Spotify&#8217;\u0131n yetkilendirme sayfas\u0131na y\u00f6nlendirirsiniz. Bu istek, uygulaman\u0131z\u0131n <code>Client ID<\/code>&#8216;sini, <code>Redirect URI<\/code>&#8216;sini ve istedi\u011finiz izinleri (scopes) i\u00e7erir. \u00d6rne\u011fin, <code>user-read-recently-played<\/code> veya <code>user-top-read<\/code>.<br \/>\n2.  <strong>Kullan\u0131c\u0131 Onay\u0131:<\/strong> Kullan\u0131c\u0131, uygulaman\u0131z\u0131n istedi\u011fi izinleri onaylar.<br \/>\n3.  <strong>Yetkilendirme Kodu:<\/strong> Spotify, kullan\u0131c\u0131y\u0131 <code>Redirect URI<\/code>&#8216;nize bir yetkilendirme kodu ile y\u00f6nlendirir.<br \/>\n4.  <strong>Eri\u015fim Token\u0131 \u0130ste\u011fi:<\/strong> Uygulaman\u0131z, bu yetkilendirme kodunu, <code>Client ID<\/code>&#8216;sini ve <code>Client Secret<\/code>&#8216;\u0131n\u0131 kullanarak Spotify&#8217;a bir eri\u015fim token\u0131 (access token) ve yenileme token\u0131 (refresh token) almak i\u00e7in bir istek g\u00f6nderir.<br \/>\n5.  <strong>API Eri\u015fimi:<\/strong> Elde etti\u011finiz eri\u015fim token\u0131 ile Spotify API&#8217;ye yetkili istekler yapabilirsiniz. Eri\u015fim tokenlar\u0131n\u0131n s\u00fcresi s\u0131n\u0131rl\u0131d\u0131r (genellikle 1 saat). S\u00fcresi doldu\u011funda, yenileme token\u0131n\u0131 kullanarak yeni bir eri\u015fim token\u0131 alabilirsiniz.<\/p>\n<h4>Basit Bir Prometheus Exporter Olu\u015fturma (Python \u00d6rne\u011fi)<\/h4>\n<p>\u015eimdi, Spotify API&#8217;den veri \u00e7ekecek ve bu verileri Prometheus&#8217;un anlayaca\u011f\u0131 formatta (text exposition format) sunacak basit bir Python exporter&#8217;\u0131 yazal\u0131m. <code>spotipy<\/code> k\u00fct\u00fcphanesi, Spotify API ile etkile\u015fim kurmay\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<p>\u00d6ncelikle, <code>requirements.txt<\/code> dosyan\u0131za <code>spotipy<\/code> ve <code>prometheus_client<\/code> ekleyin:<\/p>\n<pre><code class=\"language-plaintext\">spotipy\nprometheus_client\nFlask<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, <code>spotify_exporter.py<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-python\">import os\nimport time\nimport spotipy\nfrom spotipy.oauth2 import SpotifyOAuth\nfrom prometheus_client import start_http_server, Gauge\nfrom flask import Flask, redirect, request, session, url_for\n\n# Ortam de\u011fi\u015fkenlerinden kimlik bilgilerini al\nCLIENT_ID = os.environ.get(\"SPOTIPY_CLIENT_ID\")\nCLIENT_SECRET = os.environ.get(\"SPOTIPY_CLIENT_SECRET\")\nREDIRECT_URI = os.environ.get(\"SPOTIPY_REDIRECT_URI\", \"http:\/\/localhost:8888\/callback\")\nSCOPE = \"user-read-recently-played user-top-read user-read-playback-state\"\n\n# Flask uygulamas\u0131\napp = Flask(__name__)\napp.secret_key = os.urandom(24) # G\u00fcvenlik i\u00e7in rastgele bir anahtar\n\n# SpotifyOAuth nesnesi\nsp_oauth = SpotifyOAuth(\n    CLIENT_ID,\n    CLIENT_SECRET,\n    REDIRECT_URI,\n    scope=SCOPE,\n    cache_path=\".spotify_cache\" # Tokenlar\u0131 saklamak i\u00e7in dosya\n)\n\n# Prometheus metrikleri\nspotify_recently_played_count = Gauge(\n    'spotify_recently_played_count',\n    'Number of recently played tracks',\n    ['track_name', 'artist_name']\n)\nspotify_current_playback_state = Gauge(\n    'spotify_current_playback_state',\n    'Current playback state (1 if playing, 0 if paused\/stopped)',\n    ['track_name', 'artist_name']\n)\nspotify_top_artists_plays = Gauge(\n    'spotify_top_artists_plays',\n    'Estimated plays for top artists (based on API popularity)',\n    ['artist_name']\n)\n\ndef get_spotify_data():\n    \"\"\"Spotify API'den veri \u00e7eker ve Prometheus metriklerini g\u00fcnceller.\"\"\"\n    token_info = sp_oauth.get_cached_token()\n    if not token_info:\n        print(\"Eri\u015fim token\u0131 bulunamad\u0131. L\u00fctfen \/login adresine giderek yetkilendirme yap\u0131n.\")\n        return\n\n    sp = spotipy.Spotify(auth=token_info['access_token'])\n\n    try:\n        # Son dinlenen \u015fark\u0131lar\n        recently_played = sp.current_user_recently_played(limit=50)\n        for item in recently_played['items']:\n            track = item['track']\n            artist_names = \", \".join([artist['name'] for artist in track['artists']])\n            spotify_recently_played_count.labels(track_name=track['name'], artist_name=artist_names).set(1) # Her dinleme i\u00e7in 1\n        \n        # Mevcut \u00e7alma durumu\n        current_playback = sp.current_user_playback()\n        if current_playback and current_playback['is_playing']:\n            track = current_playback['item']\n            artist_names = \", \".join([artist['name'] for artist in track['artists']])\n            spotify_current_playback_state.labels(track_name=track['name'], artist_name=artist_names).set(1)\n        else:\n            # E\u011fer \u00e7alma yoksa veya duraklat\u0131lm\u0131\u015fsa, t\u00fcm etiketleri s\u0131f\u0131rla\n            for label_set in spotify_current_playback_state.collect():\n                for sample in label_set.samples:\n                    spotify_current_playback_state.labels(track_name=sample.labels.get('track_name', ''), artist_name=sample.labels.get('artist_name', '')).set(0)\n\n        # En \u00e7ok dinlenen sanat\u00e7\u0131lar (API pop\u00fclerli\u011fine g\u00f6re basit bir g\u00f6sterim)\n        top_artists = sp.current_user_top_artists(limit=10, time_range='medium_term')\n        for artist in top_artists['items']:\n            # Pop\u00fclerlik 0-100 aras\u0131 bir de\u011ferdir. Basit\u00e7e bir \"oynatma\" tahmini olarak kullanabiliriz.\n            spotify_top_artists_plays.labels(artist_name=artist['name']).set(artist['popularity'])\n\n    except spotipy.exceptions.SpotifyException as e:\n        print(f\"Spotify API hatas\u0131: {e}\")\n        # Token s\u00fcresi dolmu\u015f olabilir, yenileme ak\u0131\u015f\u0131n\u0131 tetikle\n        if e.http_status == 401:\n            token_info = sp_oauth.refresh_access_token(token_info['refresh_token'])\n            if token_info:\n                print(\"Token yenilendi.\")\n                # Yeniden deneme\n                get_spotify_data()\n            else:\n                print(\"Token yenileme ba\u015far\u0131s\u0131z. L\u00fctfen tekrar yetkilendirin.\")\n    except Exception as e:\n        print(f\"Genel hata: {e}\")\n\n@app.route(\"\/\")\ndef index():\n    if not sp_oauth.validate_token(sp_oauth.get_cached_token()):\n        return redirect(url_for(\"login\"))\n    return \"Spotify Exporter \u00e7al\u0131\u015f\u0131yor. Metrikler \/metrics adresinde. Yetkilendirme ba\u015far\u0131l\u0131.\"\n\n@app.route(\"\/login\")\ndef login():\n    auth_url = sp_oauth.get_authorize_url()\n    return redirect(auth_url)\n\n@app.route(\"\/callback\")\ndef callback():\n    code = request.args.get(\"code\")\n    token_info = sp_oauth.get_access_token(code)\n    session[\"token_info\"] = token_info # Token'\u0131 session'a kaydet (veya daha kal\u0131c\u0131 bir yere)\n    return redirect(url_for(\"index\"))\n\n@app.route(\"\/metrics\")\ndef metrics():\n    get_spotify_data() # Her metrik iste\u011finde veriyi g\u00fcncelle\n    return start_http_server(8000) # Bu sat\u0131r asl\u0131nda bir web sunucusu ba\u015flat\u0131r, Flask ile birle\u015ftirilmesi gerekir.\n                                 # Prometheus client'\u0131n kendi sunucusunu kullanmak daha do\u011fru.\n                                 # Asl\u0131nda Flask uygulamas\u0131n\u0131 metrics endpoint'i olarak kullanaca\u011f\u0131z.\n\nif __name__ == \"__main__\":\n    # Prometheus metrik sunucusunu ayr\u0131 bir thread'de ba\u015flat\n    start_http_server(8000) # Prometheus client'\u0131n kendi HTTP sunucusu\n    print(\"Prometheus metrikleri 8000 portunda sunuluyor.\")\n    \n    # Flask uygulamas\u0131n\u0131 ba\u015flat\n    app.run(host=\"0.0.0.0\", port=8888)<\/pre>\n<p><\/code><br \/>\n<strong>Not:<\/strong> Yukar\u0131daki <code>spotify_exporter.py<\/code> \u00f6rne\u011fi, Flask ile yetkilendirme ak\u0131\u015f\u0131n\u0131 y\u00f6netirken, Prometheus metriklerini ayr\u0131 bir portta (8000) sunar. Flask uygulamas\u0131n\u0131 <code>http:\/\/localhost:8888<\/code> adresinde \u00e7al\u0131\u015ft\u0131racak ve Prometheus'un metrikleri <code>http:\/\/localhost:8000\/metrics<\/code> adresinden \u00e7ekmesini sa\u011flayaca\u011f\u0131z. <code>get_spotify_data()<\/code> fonksiyonu, her metrik iste\u011finde \u00e7a\u011fr\u0131lmak yerine, d\u00fczenli aral\u0131klarla veya bir cron job ile \u00e7a\u011fr\u0131lacak \u015fekilde optimize edilebilir. Basitlik ad\u0131na, burada <code>\/metrics<\/code> iste\u011finde g\u00fcncelleniyor.<\/p>\n<p>### Docker ile Ortam\u0131 Kurma<\/p>\n<p>\u015eimdi, Prometheus, Grafana ve \u00f6zel exporter'\u0131m\u0131z\u0131 Docker konteynerleri i\u00e7inde \u00e7al\u0131\u015ft\u0131racak bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015ftural\u0131m.<\/p>\n<h4>Docker Compose Dosyas\u0131 Haz\u0131rl\u0131\u011f\u0131<\/h4>\n<p>Projenizin ana dizininde <code>docker-compose.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\">version: '3.8'\n\nservices:\n  prometheus:\n    image: prom\/prometheus:latest\n    container_name: prometheus\n    ports:\n      - \"9090:9090\"\n    volumes:\n      - .\/prometheus.yml:\/etc\/prometheus\/prometheus.yml\n      - prometheus_data:\/prometheus\n    command:\n      - '--config.file=\/etc\/prometheus\/prometheus.yml'\n      - '--storage.tsdb.path=\/prometheus'\n      - '--web.console.libraries=\/usr\/share\/prometheus\/console_libraries'\n      - '--web.console.templates=\/usr\/share\/prometheus\/consoles'\n    restart: unless-stopped\n\n  grafana:\n    image: grafana\/grafana:latest\n    container_name: grafana\n    ports:\n      - \"3000:3000\"\n    volumes:\n      - grafana_data:\/var\/lib\/grafana\n    restart: unless-stopped\n    environment:\n      - GF_SECURITY_ADMIN_USER=admin\n      - GF_SECURITY_ADMIN_PASSWORD=admin # \u00dcretim ortam\u0131nda daha g\u00fc\u00e7l\u00fc bir \u015fifre kullan\u0131n!\n\n  spotify-exporter:\n    build:\n      context: .\n      dockerfile: Dockerfile.exporter\n    container_name: spotify-exporter\n    ports:\n      - \"8000:8000\" # Prometheus metrikleri i\u00e7in\n      - \"8888:8888\" # Yetkilendirme ak\u0131\u015f\u0131 i\u00e7in Flask uygulamas\u0131\n    environment:\n      - SPOTIPY_CLIENT_ID=${SPOTIPY_CLIENT_ID}\n      - SPOTIPY_CLIENT_SECRET=${SPOTIPY_CLIENT_SECRET}\n      - SPOTIPY_REDIRECT_URI=http:\/\/spotify-exporter:8888\/callback # Konteyner i\u00e7inden eri\u015fim\n    restart: unless-stopped\n\nvolumes:\n  prometheus_data:\n  grafana_data:<\/pre>\n<p><\/code><\/p>\n<p><code>spotify-exporter<\/code> i\u00e7in bir <code>Dockerfile.exporter<\/code> dosyas\u0131na ihtiyac\u0131m\u0131z var:<\/p>\n<pre><code class=\"language-dockerfile\">FROM python:3.9-slim-buster\n\nWORKDIR \/app\n\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY spotify_exporter.py .\n\nEXPOSE 8000\nEXPOSE 8888\n\nCMD [\"python\", \"spotify_exporter.py\"]<\/pre>\n<p><\/code><\/p>\n<p><code>docker-compose.yml<\/code> dosyas\u0131ndaki <code>SPOTIPY_CLIENT_ID<\/code> ve <code>SPOTIPY_CLIENT_SECRET<\/code> ortam de\u011fi\u015fkenlerini tan\u0131mlamak i\u00e7in, projenizin k\u00f6k dizininde <code>.env<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-plaintext\">SPOTIPY_CLIENT_ID=sizin_client_id_buraya\nSPOTIPY_CLIENT_SECRET=sizin_client_secret_buraya<\/pre>\n<p><\/code><br \/>\nBu <code>.env<\/code> dosyas\u0131, <code>docker-compose<\/code> taraf\u0131ndan otomatik olarak okunacakt\u0131r.<\/p>\n<h4>Prometheus Yap\u0131land\u0131rmas\u0131 (<code>prometheus.yml<\/code>)<\/h4>\n<p>Prometheus'un \u00f6zel exporter'\u0131m\u0131z\u0131 bulup metrikleri \u00e7ekebilmesi i\u00e7in bir yap\u0131land\u0131rma dosyas\u0131na ihtiyac\u0131 var. Projenizin ana dizininde <code>prometheus.yml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\">global:\n  scrape_interval: 15s # Metrikleri her 15 saniyede bir \u00e7ek\n\nscrape_configs:\n  - job_name: 'prometheus'\n    static_configs:\n      - targets: ['localhost:9090'] # Prometheus'un kendisini izle\n\n  - job_name: 'spotify_exporter'\n    static_configs:\n      - targets: ['spotify-exporter:8000'] # Spotify exporter'\u0131 izle<\/pre>\n<p><\/code><br \/>\nBurada <code>spotify-exporter:8000<\/code> kullanmam\u0131z\u0131n nedeni, Docker Compose a\u011f\u0131 i\u00e7inde <code>spotify-exporter<\/code> servisinin ad\u0131n\u0131n DNS olarak \u00e7\u00f6z\u00fcmlenmesidir.<\/p>\n<h4>Ortam\u0131 Ba\u015flatma<\/h4>\n<p>T\u00fcm dosyalar\u0131 olu\u015fturduktan sonra, projenizin ana dizininde terminali a\u00e7\u0131n ve \u015fu komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">docker-compose up -d<\/pre>\n<p><\/code><br \/>\nBu komut, t\u00fcm servisleri arka planda ba\u015flatacakt\u0131r.<\/p>\n<p><strong>Yetkilendirme Ad\u0131m\u0131:<\/strong><br \/>\nServisler ba\u015flad\u0131ktan sonra, <code>spotify-exporter<\/code> konteynerine ilk yetkilendirmeyi yapman\u0131z gerekecek.<br \/>\n1.  Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:8888<\/code> adresine gidin.<br \/>\n2.  Bu sizi Spotify'\u0131n yetkilendirme sayfas\u0131na y\u00f6nlendirecek. \u0130zinleri onaylay\u0131n.<br \/>\n3.  Onaydan sonra <code>http:\/\/localhost:8888\/callback<\/code> adresine y\u00f6nlendirileceksiniz ve exporter'\u0131n\u0131z\u0131n yetkilendirildi\u011fi mesaj\u0131n\u0131 g\u00f6receksiniz. Bu ad\u0131m, <code>spotify_exporter.py<\/code> i\u00e7indeki <code>.spotify_cache<\/code> dosyas\u0131n\u0131n olu\u015fturulmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Art\u0131k Prometheus, <code>spotify-exporter<\/code>'dan metrikleri \u00e7ekmeye ba\u015flayacakt\u0131r. Prometheus UI'ye <code>http:\/\/localhost:9090<\/code> adresinden eri\u015ferek metriklerin gelip gelmedi\u011fini kontrol edebilirsiniz.<\/p>\n<h3>Grafana ile Metrikleri G\u00f6rselle\u015ftirme<\/h3>\n<p>Metrikler Prometheus'a akmaya ba\u015flad\u0131\u011f\u0131na g\u00f6re, s\u0131ra geldi bu verileri anlaml\u0131 grafikler ve panellerle g\u00f6rselle\u015ftirmeye.<\/p>\n<h4>Grafana'ya Eri\u015fim ve Veri Kayna\u011f\u0131 Ekleme<\/h4>\n<p>1.  Taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:3000<\/code> adresine gidin.<br \/>\n2.  Kullan\u0131c\u0131 ad\u0131 <code>admin<\/code> ve \u015fifre <code>admin<\/code> (docker-compose dosyas\u0131nda ayarlad\u0131\u011f\u0131m\u0131z gibi) ile giri\u015f yap\u0131n. Giri\u015f yapt\u0131ktan sonra \u015fifrenizi de\u011fi\u015ftirmeniz istenebilir.<br \/>\n3.  Sol men\u00fcden \"Connections\" -> \"Data sources\" -> \"Add new data source\" yolunu izleyin.<br \/>\n4.  \"Prometheus\" se\u00e7ene\u011fini se\u00e7in.<br \/>\n5.  URL alan\u0131na <code>http:\/\/prometheus:9090<\/code> yaz\u0131n. (Grafana konteyneri i\u00e7inden Prometheus konteynerine eri\u015fim i\u00e7in servis ad\u0131n\u0131 kullan\u0131yoruz).<br \/>\n6.  \"Save & test\" butonuna t\u0131klay\u0131n. \"Data source is working\" mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h4>\u0130lk Dashboard'u Olu\u015fturma<\/h4>\n<p>\u015eimdi, Spotify metriklerimizi g\u00f6sterecek bir dashboard olu\u015ftural\u0131m:<\/p>\n<p>1.  Sol men\u00fcden \"Dashboards\" -> \"New dashboard\" -> \"Add a new panel\" se\u00e7ene\u011fini t\u0131klay\u0131n.<br \/>\n2.  \"Query\" b\u00f6l\u00fcm\u00fcnde, veri kayna\u011f\u0131 olarak az \u00f6nce ekledi\u011finiz Prometheus'u se\u00e7in.<br \/>\n3.  \"Metric browser\" veya \"Code\" alan\u0131na PromQL sorgular\u0131n\u0131z\u0131 yazarak grafikleri olu\u015fturun.<\/p>\n<h4>\u00d6rnek Paneller ve Grafikler<\/h4>\n<p>\u0130\u015fte olu\u015fturabilece\u011finiz baz\u0131 \u00f6rnek paneller ve kullanabilece\u011finiz PromQL sorgular\u0131:<\/p>\n<p>*   <strong>Son Dinlenen \u015eark\u0131lar\u0131n Say\u0131s\u0131 (Zaman Serisi):<\/strong><br \/>\n    *   <strong>Sorgu:<\/strong> <code>increase(spotify_recently_played_count[1h])<\/code><br \/>\n    *   <strong>Panel Tipi:<\/strong> Graph<br \/>\n    *   <strong>A\u00e7\u0131klama:<\/strong> Son bir saat i\u00e7inde dinlenen farkl\u0131 \u015fark\u0131lar\u0131n say\u0131s\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <strong>Mevcut \u00c7alma Durumu (G\u00f6sterge\/Gauge):<\/strong><br \/>\n    *   <strong>Sorgu:<\/strong> <code>spotify_current_playback_state<\/code><br \/>\n    *   <strong>Panel Tipi:<\/strong> Stat veya Gauge<br \/>\n    *   <strong>A\u00e7\u0131klama:<\/strong> Hangi \u015fark\u0131n\u0131n \u00e7al\u0131nd\u0131\u011f\u0131n\u0131 ve \u00e7alma durumunu (oynat\u0131l\u0131yor\/duraklat\u0131ld\u0131) g\u00f6sterir. <code>Value options<\/code> alt\u0131ndan <code>Value mappings<\/code> kullanarak 1'i \"Oynat\u0131l\u0131yor\", 0'\u0131 \"Duraklat\u0131ld\u0131\" olarak e\u015fleyebilirsiniz.<br \/>\n*   <strong>En \u00c7ok Dinlenen Sanat\u00e7\u0131lar (Tablo\/Bar Chart):<\/strong><br \/>\n    *   <strong>Sorgu:<\/strong> <code>topk(5, sum by (artist_name) (spotify_top_artists_plays))<\/code><br \/>\n    *   <strong>Panel Tipi:<\/strong> Table veya Bar Chart<br \/>\n    *   <strong>A\u00e7\u0131klama:<\/strong> En pop\u00fcler 5 sanat\u00e7\u0131n\u0131z\u0131 ve onlar\u0131n \"pop\u00fclerlik\" skorlar\u0131n\u0131 g\u00f6sterir.<br \/>\n*   <strong>Dinleme S\u00fcresi (Varsay\u0131msal Metrik):<\/strong><br \/>\n    *   <code>spotify_exporter.py<\/code> i\u00e7inde <code>spotify_listening_duration_seconds<\/code> gibi bir metrik ekleyerek dinleme s\u00fcrelerini de izleyebilirsiniz. \u00d6rne\u011fin, her 15 saniyede bir <code>spotify_current_playback_state<\/code> 1 ise, o \u015fark\u0131n\u0131n s\u00fcresine 15 saniye ekleyen bir saya\u00e7 tutulabilir.<br \/>\n    *   <strong>Sorgu:<\/strong> <code>sum by (artist_name) (rate(spotify_listening_duration_seconds[5m]))<\/code><br \/>\n    *   <strong>Panel Tipi:<\/strong> Graph<br \/>\n    *   <strong>A\u00e7\u0131klama:<\/strong> Sanat\u00e7\u0131lara g\u00f6re ortalama dinleme s\u00fcresi.<\/p>\n<p>Grafana'n\u0131n esnekli\u011fi sayesinde, renkleri, eksenleri, etiketleri ve daha bir\u00e7ok g\u00f6rsel \u00f6zelli\u011fi \u00f6zelle\u015ftirebilirsiniz. Kendi m\u00fczik zevkinize ve ihtiya\u00e7lar\u0131n\u0131za g\u00f6re farkl\u0131 paneller deneyerek en anlaml\u0131 g\u00f6rselle\u015ftirmeleri olu\u015fturun.<\/p>\n<h3>\u0130leri Seviye Kullan\u0131m ve Optimizasyon<\/h3>\n<p>Bu kurulum temel bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Daha sa\u011flam ve \u00f6zellikli bir izleme sistemi i\u00e7in baz\u0131 ileri seviye ad\u0131mlar at\u0131labilir.<\/p>\n<h4>Otomatik Token Yenileme<\/h4>\n<p><code>spotipy<\/code> k\u00fct\u00fcphanesi, <code>cache_path<\/code> \u00f6zelli\u011fi sayesinde tokenlar\u0131 otomatik olarak \u00f6nbelle\u011fe al\u0131r ve yeniler. Ancak Docker konteynerleri yeniden olu\u015fturuldu\u011funda bu \u00f6nbellek kaybolabilir. Kal\u0131c\u0131 bir depolama (Docker volume) kullanarak <code>.spotify_cache<\/code> dosyas\u0131n\u0131 konteyner d\u0131\u015f\u0131na ba\u011flamak, her yeniden ba\u015flatmada yetkilendirme yapma ihtiyac\u0131n\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<pre><code class=\"language-yaml\">volumes:\n      - .\/spotify_cache:\/app\/.spotify_cache # spotify_cache klas\u00f6r\u00fcn\u00fc kal\u0131c\u0131 yap<\/pre>\n<p><\/code><br \/>\nBu sat\u0131r\u0131 <code>spotify-exporter<\/code> servisine ekleyerek, token bilgilerinizi konteyner yeniden ba\u015flat\u0131lsa bile koruyabilirsiniz.<\/p>\n<h4>Daha Fazla Spotify API Verisi Entegre Etme<\/h4>\n<p>Spotify Web API, <code>user-top-tracks<\/code>, <code>user-follow-read<\/code>, <code>user-library-read<\/code> gibi bir\u00e7ok farkl\u0131 scope ve endpoint sunar. Bu endpoint'leri kullanarak daha fazla metrik toplayabilirsiniz:<\/p>\n<p>*   <strong>En \u00c7ok Dinlenen \u015eark\u0131lar:<\/strong> <code>sp.current_user_top_tracks()<\/code><br \/>\n*   <strong>K\u00fct\u00fcphanenizdeki \u015eark\u0131 Say\u0131s\u0131:<\/strong> <code>sp.current_user_saved_tracks()<\/code><br \/>\n*   <strong>Takip Etti\u011finiz Sanat\u00e7\u0131lar:<\/strong> <code>sp.current_user_followed_artists()<\/code><br \/>\n*   <strong>\u00c7alma Listesi Metrikleri:<\/strong> Kendi olu\u015fturdu\u011funuz \u00e7alma listelerinin takip\u00e7i say\u0131s\u0131, \u015fark\u0131 say\u0131s\u0131 gibi metrikler.<\/p>\n<p>Her yeni metrik i\u00e7in <code>spotify_exporter.py<\/code> dosyas\u0131nda yeni bir <code>Gauge<\/code> veya <code>Counter<\/code> tan\u0131mlaman\u0131z ve ilgili API \u00e7a\u011fr\u0131s\u0131n\u0131 yap\u0131p de\u011feri g\u00fcncellemeniz gerekecektir.<\/p>\n<h4>Alarm Kurulumu (Prometheus Alertmanager)<\/h4>\n<p>Belirli metrikler e\u015fi\u011fin \u00fczerine \u00e7\u0131kt\u0131\u011f\u0131nda veya alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde bildirim almak isteyebilirsiniz. \u00d6rne\u011fin, bir sanat\u00e7\u0131 olarak \u015fark\u0131n\u0131z\u0131n dinlenme say\u0131s\u0131nda ani bir d\u00fc\u015f\u00fc\u015f oldu\u011funda veya ki\u015fisel dinleme s\u00fcreniz belirli bir seviyenin alt\u0131na d\u00fc\u015ft\u00fc\u011f\u00fcnde. Prometheus Alertmanager, bu t\u00fcr durumlar i\u00e7in alarm kurman\u0131z\u0131 sa\u011flar.<\/p>\n<p>1.  <strong>Alertmanager Yap\u0131land\u0131rmas\u0131:<\/strong> <code>alertmanager.yml<\/code> dosyas\u0131 olu\u015fturarak bildirim al\u0131c\u0131lar\u0131n\u0131 (e-posta, Slack vb.) ve kurallar\u0131 tan\u0131mlars\u0131n\u0131z.<br \/>\n2.  <strong>Prometheus Kurallar\u0131:<\/strong> <code>rules.yml<\/code> dosyas\u0131 olu\u015fturarak hangi metriklerin hangi ko\u015fullarda alarm tetiklemesi gerekti\u011fini belirtirsiniz.<br \/>\n3.  <strong>Docker Compose Entegrasyonu:<\/strong> Alertmanager'\u0131 da <code>docker-compose.yml<\/code> dosyan\u0131za bir servis olarak eklersiniz.<\/p>\n<p>Bu sayede, m\u00fczik metriklerinizdeki \u00f6nemli de\u011fi\u015fikliklerden an\u0131nda haberdar olabilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, Spotify dinleme al\u0131\u015fkanl\u0131klar\u0131n\u0131z\u0131 ve sanat\u00e7\u0131 performans metriklerinizi Docker, Prometheus ve Grafana kullanarak nas\u0131l izleyece\u011finizi detayl\u0131 bir \u015fekilde ele ald\u0131k. Kendi \u00f6zel Prometheus exporter'\u0131n\u0131z\u0131 olu\u015fturmaktan, Docker Compose ile t\u00fcm ortam\u0131 aya\u011fa kald\u0131rmaya ve Grafana ile verileri g\u00f6rselle\u015ftirmeye kadar her ad\u0131m\u0131 \u00f6\u011frendiniz. Bu kurulum, size m\u00fczik d\u00fcnyas\u0131yla olan ili\u015fkinizi daha derinlemesine anlama ve i\u00e7erik \u00fcreticileri i\u00e7in stratejik kararlar alma yetene\u011fi kazand\u0131racakt\u0131r. Unutmay\u0131n, bu sadece bir ba\u015flang\u0131\u00e7; Spotify API'nin sundu\u011fu zengin verileri ke\u015ffetmeye devam ederek panelinizi daha da geli\u015ftirebilir ve ki\u015fiselle\u015ftirebilirsiniz. Kendi m\u00fczik analizi merkezinizi kurman\u0131n keyfini \u00e7\u0131kar\u0131n!<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Neden Docker kullanmal\u0131y\u0131z?<\/h4>\n<p>Docker, t\u00fcm bile\u015fenleri (Prometheus, Grafana, Exporter) izole konteynerler i\u00e7inde \u00e7al\u0131\u015ft\u0131rman\u0131z\u0131 sa\u011flar. Bu, kurulumu basitle\u015ftirir, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nler ve farkl\u0131 ortamlarda (geli\u015ftirme, \u00fcretim) tutarl\u0131 bir deneyim sunar. Ayr\u0131ca, t\u00fcm sistemi tek bir komutla kolayca ba\u015flat\u0131p durdurabilirsiniz.<\/p>\n<h4>Spotify API'den hangi verileri \u00e7ekebilirim?<\/h4>\n<p>Spotify Web API olduk\u00e7a zengindir. Kullan\u0131c\u0131n\u0131n son dinledi\u011fi \u015fark\u0131lar, en \u00e7ok dinledi\u011fi sanat\u00e7\u0131lar\/\u015fark\u0131lar, \u00e7alma listeleri, k\u00fct\u00fcphanesindeki \u015fark\u0131lar, takip etti\u011fi sanat\u00e7\u0131lar ve hatta mevcut \u00e7alma durumu gibi bir\u00e7ok veriye eri\u015febilirsiniz. Eri\u015fim i\u00e7in do\u011fru OAuth scope'lar\u0131n\u0131 talep etmeniz gerekir.<\/p>\n<h4>Bu kurulumun maliyeti nedir?<\/h4>\n<p>Bu kurulum tamamen a\u00e7\u0131k kaynakl\u0131 yaz\u0131l\u0131mlar (Docker, Prometheus, Grafana, Python) kulland\u0131\u011f\u0131 i\u00e7in yaz\u0131l\u0131m maliyeti s\u0131f\u0131rd\u0131r. E\u011fer kendi bilgisayar\u0131n\u0131zda \u00e7al\u0131\u015ft\u0131r\u0131yorsan\u0131z, donan\u0131m maliyeti de olmaz. Ancak, bir bulut sunucusunda (AWS, Google Cloud, Azure vb.) \u00e7al\u0131\u015ft\u0131rmay\u0131 tercih ederseniz, sunucu kiralama \u00fccretleri olacakt\u0131r. Genellikle d\u00fc\u015f\u00fck kaynak t\u00fcketen bir kurulum oldu\u011fu i\u00e7in maliyetler olduk\u00e7a uygun olacakt\u0131r.<\/p>\n<h4>Veri g\u00fcvenli\u011fi nas\u0131l sa\u011flan\u0131r?<\/h4>\n<p>Spotify API'den<\/p>\n","protected":false},"excerpt":{"rendered":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131\nG\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda veriler, ki\u015fisel al\u0131\u015fkanl\u0131klar\u0131m\u0131zdan profesy&#8230;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1407],"tags":[],"class_list":{"0":"post-37281","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131\" \/>\n<meta property=\"og:description\" content=\"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda veriler, ki\u015fisel al\u0131\u015fkanl\u0131klar\u0131m\u0131zdan profesy...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-29T18:30:46+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131\",\"datePublished\":\"2025-12-29T18:30:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\"},\"wordCount\":2532,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\",\"name\":\"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-29T18:30:46+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/","og_locale":"tr_TR","og_type":"article","og_title":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131","og_description":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 G\u00fcn\u00fcm\u00fcz dijital \u00e7a\u011f\u0131nda veriler, ki\u015fisel al\u0131\u015fkanl\u0131klar\u0131m\u0131zdan profesy...","og_url":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-29T18:30:46+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131","datePublished":"2025-12-29T18:30:46+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/"},"wordCount":2532,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/","url":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/","name":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131 - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-29T18:30:46+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/spotify-metriklerini-izleme-docker-ile-prometheus-ve-grafana-kullanimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Spotify Metriklerini \u0130zleme: Docker ile Prometheus ve Grafana Kullan\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37281","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=37281"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/37281\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=37281"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=37281"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=37281"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}