Yıllarca sistem yöneticiliği yaparken en büyük dertlerimden biri, problem olduğunda GB’larca ham kayıt dosyası içinden problemin izini sürmeye çalışmaktı. Tabii sunum hazırlamak gerektiğinde geçmişe yönelik istatistikler çıkarmak, o veriyi işleyip grafiiğe dönüştürmek gibi zaman öldüren işler de cabası. İşte bu yüzden Splunk‘ı ilk kullanmaya başladığımda başardıkları karşısında çok etkilenmiştim; sağladığı indeksleme altyapısı ile bilgiyi biriktirip, çok hızlı arama ve raporlama imkanı sağlayan Splunk‘ın en beğendiğim özelliklerinden biri de kendi uygulamanızı geliştirmenize ve bunu SplunkBase üzerinden diğer kullanıcılar ile paylaşmanıza imkan sağlaması.
PostgreSQL ile ilgili birşeyler araştırırken, SplunkBase dünyasında bu veritabanı yönetim sistemi ile ilgili birşey yapılmamış olduğunu gördüm. Ben de ufak ufak birşeyler yapayım, ileride büyür birilerinin derdine derman olur belki diye düşünerek SplunkforPostgreSQL‘ e başladım. Bu uygulama ile amacım, PostgreSQL sunucularda aktif bağlantı sayısı gibi bazı performans değerlerini gözlemek.
Bu çalışmalar sırasında yaptıklarımı adım adım anlatmaya çalışacağım.
* Ara not: Splunk bir python geliştirme ortamı sunduğu için iş yapan kodları -hakim olmadığım bir dil olan- python ile yazmaya çalıştım, siz istediğiniz dil/kabuk ile işinizi görebilirsiniz. Şimdiden ne kusur ettiysem affola
Splunk uygulamaları öntanımlı olarak /opt/splunk/etc/apps dizini altında bulunuyor:
# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL
# ls -al
total 20
drwxr-xr-x 4 splunk splunk 4096 2009-03-26 22:28 .
drwxr-xr-x 15 splunk splunk 4096 2009-04-09 22:19 ..
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 bin
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 default
-r-xr-xr-x 1 splunk splunk 22 2009-04-09 22:23 README.txt
/opt/splunk/etc/apps/SplunkForPostgreSQL/bin dizini altında çalıştırılabilir dosyalarımız (betikler vb.), /opt/splunk/etc/apps/SplunkForPostgreSQL/default dizininde ise konfigürasyon dosyaları bulunmakta.
Önce /opt/splunk/etc/apps/SplunkForPostgreSQL/bin dizinindeki, veritabanı üzerindeki aktif bağlantı sayısını kontrol eden uygulamamıza bir bakalım:
# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL/bin
# cat active_connections.py
import pgsql, sys
try:
connection = pgsql.connect(host="localhost", database="template1", user=
"postgres", password="postgres_pass")
except:
print "Failed to connect to the database"
sys.exit()
mark = connection.cursor()
statement = 'SELECT COUNT(*) FROM pg_stat_activity'
mark.execute(statement)
connection.commit()
rows = mark.fetchall()
for row in rows:
active_conn = row[0]
print "PostgreSQL active connections: pg_active_conn =", active_conn
Bu betik Splunk tarafından çalıştırıldığında PostgreSQL veritabanı sunucumuza bağlanıp, aktif bağlantı sayısını alacaktır. Splunk’da ilgili kayıtları sourcetype=”pg_active_conn” sorgusu ile aradığınızda aşağıdaki gibi bir görüntü ile karşılaşıyoruz :

Şimdi amacımız bu sorguyu belli aralıklarla çalıştırıp, grafiğe dokmek. Bunun için /opt/splunk/etc/apps/SplunkForPostgreSQL/default dizini altındaki konfigürsyon dosyalarını kullanacağız.
# pwd
/opt/splunk/etc/apps/SplunkForPostgreSQL/default
# ls -al
total 32
drwxr-xr-x 2 splunk splunk 4096 2009-04-09 22:23 .
drwxr-xr-x 4 splunk splunk 4096 2009-03-26 22:28 ..
-r-xr-xr-x 1 splunk splunk 351 2009-04-09 22:23 bundles.conf
-r–r–r– 1 splunk splunk 154 2009-04-09 22:23 eventtypes.conf
-r-xr-xr-x 1 splunk splunk 235 2009-04-09 22:23 inputs.conf
-r–r–r– 1 splunk splunk 141 2009-04-09 22:23 props.conf
-r-xr-xr-x 1 splunk splunk 727 2009-04-09 22:23 savedsearches.conf
-r–r–r– 1 splunk splunk 3994 2009-04-09 22:23 transforms.conf
Şimdi tek tek dosyalara bir göz atalım:
bundles.conf
Uygulmanın amacı ve yazarı hakkında kısa bir bilgiyi bu dosya içerisnde veriyoruz. Ayrıca uygulamanın geriye doğru uyumluluk ile ilgili bir sorunu var ise çalışabildiği en düşük Splunk sürümünü de yine bu dosyada belirtiyoruz.
# Copyright (C) 2005-2008 Splunk Inc. All Rights Reserved. Version 3.3
[SplunkForPostgresql]
author = Ahmet Ozturk
version = 0.1
minsplunkversion = 3.3
contactemail = ahmet.ozturk@pro-g.com.tr
description = This application is a collection of saved searches, eventtypes,
field extractions, dashboards, and scripted inputs that support the PostgreSQL DBMS
eventtypes.conf:
Şu anda bizim uygulamamız için bir eventtype tanımı yapmadık. Gerektiğinde bu dosya içinde tanımlayacağız.
inputs.conf
Periyodik olarak çalıştırıp veritabanındaki aktif bağlantı sayısını alacak betiğimizi burada tanımlıyoruz. “interval” değişkeni saniye biriminde tanımlanıyor. Aramalarda kullanacağımız “source” ve “sourcetype” türlerini burada tanımlıyoruz. Son satırdaki “disabled” parametresne dikkat. Bu değeri “false” yaparak, uygulamanın çalışmasını sağlıyoruz:
# Copyright (C) 2005-2008 Splunk Inc. All Rights Reserved. Version 3.0
[script://$SPLUNK_HOME/etc/apps/SplunkForPostgreSQL/bin/active_connections.py]
interval = 60
sourcetype = pg_active_conn
source = pg_active_conn
disabled = false
props.conf
Tanımladığımız pg_active_conn sourcetype’ın özelliklerini bu dosyada belirtiyoruz:
[pg_active_conn]
SHOULD_LINEMERGE=false
LINE_BREAKER=^()$
TRUNCATE=1000000
DATETIME_CONFIG = CURRENT
REPORTS-pg_active_conn = pg_active_conn
savedsearches.conf
Yaptığımız aramaları kaydedip, her sferinde aynı işi yapmaktan bizi kurtaran bir özellik savedsearch özelliği. İlk satırda közeli parantezler içinde verdiğimiz isim Splunk’ın giriş sayfasında “Saved Seraches” kısımıda göreceğimiz isim. “search” parametresi ile son 1 saat içinde pg_active_conn sourcetype’ındaki olayları arayıp, sunucu bazında grafik çiziyoruz. “viewstate.chart.plotMode” parametresi ile de grafiğimizin özelliğniverebiliyoruz. Duruma göre pasta, çubuk gibi grafikler de çizmek mümkün:
[SplunkForPostgreSQL - pg_active_connections by host]
action_rss = 0
search = sourcetype="pg_active_conn" pg_active_conn starthoursago=1 | timechart avg(pg_active_conn) by host
schedule = */60 * * * *
sendresults = 0
userid = 1
viewstate.chart.formatting.dateTimeFormat = %m/%d/%Y %H:%M:%S
viewstate.chart.formatting.height = 300
viewstate.chart.formatting.padding.bottom = 10
viewstate.chart.formatting.padding.left = 0
viewstate.chart.formatting.padding.right = 0
viewstate.chart.formatting.padding.top = 20
viewstate.chart.formatting.textColor = 3355443
viewstate.chart.formatting.width = 788
viewstate.chart.plotMode = line
viewstate.prefs.selectedKeys = source host sourcetype action linecount
viewstate.resultView = reportView
transforms.conf
Kayıt satırlarının nasıl yorumlanacağına ilişkin tanımların yapıldığı bir dosya. Şimdilik bu dosya ile ilgili birşey yapmıyoruz.
Bu kadar lafın üstüne biraz da ekran görüntüsü inceleyelim:
Splunk “main” menü kısmında tanımladığımız sourcetype (pg_active_conn) ve savedserach ( “PostgreSQLForSplunk – pg_active_connections by host) değerlerini görebiliriz:


Saved Seraches kısmından, tanımladığımız aramaya tıkladığımızda yukarıda açıkladığım şekilde grafiğimizi görebiliriz:

Uygulamayı bu ilkel hali ile denemek, yada göz atmak isterseniz, buradan indirebilirsiniz.
Başta da belirttiğim gibi bu bir başlangıç. Şimdilik listemde aşağıdaki konular var:
- Daha fazla performans değerinin gözlenmesi
- SMS/RSS gibi haber verme mekanizmalarının kullanılması
Buraya kadar katlanıp okuduğunuz için teşekkür ederim.