skip to Main Content

docker kullanarak zabbix kurulumu

öncelikle kullanacağız image leri docker repository den çekeceğiz. Bu örnekte sunucu olarak nginx ve veritabanı olarak mysql kullanıyorum. daha optmizebir bir yapı taiki kurulabilir.

docker pull mysql
docker pull zabbix/zabbix-server-mysql
docker pull zabbix/zabbix-web-nginx-mysql
docker pull zabbix/zabbix-java-gateway
docker pull zabbix/zabbix-agent

sonrasında

docker images

ile kontrolleri yapabiliriz.

şimdi sıra ile imageleri başlatalım. kullanılan port kullanıcı adı ve şifrenizi mevcut sistemine göre uyarlamanız gerekebilir.

docker run --name mysql-server -t -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixmysqlsifre" -e MYSQL_ROOT_PASSWORD="mysqlrootsifre" -d mysql --character-set-server=utf8 --collation-server=utf8_bin --default-authentication-plugin=mysql_native_password
docker run --name zabbix-java-gateway -t --restart unless-stopped -d zabbix/zabbix-java-gateway
docker run --name zabbix-server-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixmysqlsifre" -e MYSQL_ROOT_PASSWORD="mysqlrootsifre" -e ZBX_JAVAGATEWAY="zabbix-java-gateway" --link mysql-server:mysql --link zabbix-java-gateway:zabbix-java-gateway -p 10051:10051 --restart unless-stopped -d zabbix/zabbix-server-mysql
docker run --name zabbix-web-nginx-mysql -t -e DB_SERVER_HOST="mysql-server" -e MYSQL_DATABASE="zabbix" -e MYSQL_USER="zabbix" -e MYSQL_PASSWORD="zabbixmysqlsifre" -e MYSQL_ROOT_PASSWORD="mysqlrootsifre" --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -p 80:8080 --restart unless-stopped -d zabbix/zabbix-web-nginx-mysql
docker run --name zabbix-agent --link mysql-server:mysql --link zabbix-server-mysql:zabbix-server -e ZBX_HOSTNAME="Zabbix server" -e ZBX_SERVER_HOST="zabbix-server" -d zabbix/zabbix-agent

doğru şekilde çalıştığını kontrol edelim.

docker ps -a

şimi konfigürasyon bilgilerine bakalım… burada bize ip adresi gerekiyor…

docker inspect zabbix-agent

şimfi bir tarayıcı açarak ip adresini yazalım. zabbix kullanıcı giriş sayfası ile karşılaşırsak herşey tamamdır. default kullanıcı ado şifresi

Username: Admin
Password: zabbix

şeklindedir

siremis kurulumu

http://www.ferhatcicek.com/bilisim-dunyasi/telekomunikasyon-yazilimlari/20140326/siremis/1226.html yazısında siremis hakkında temel bilgileri blogumda paylaşmıştım. kamailio kullanıyorsanız siremis olmazsa olmazınızdır. sistemizde kamaili nun kurulu olduğunu düşünerek siremisi nasıl kuracağımızı basitçe anlatmaya başlayalım. öncelikle

http://siremis.asipto.com/pub/downloads/siremis/

adresinden güncel sürümü indirelim. şu an güncel sürüm 4.2. indirdiğiz yazılımı uygun bir noktada açalım.

root@cicek:/var/www# tar zxvf siremis-4.2.0.tgz 

açılan dizin içine girerek apache konfigürasyon dosyalarında eklemiz gereken satırları oluşturacak olan make komutunu çalıştıralım. burada kullandığınız apache sürümü önemli. ben sistemimde 2.4 sürümünü kullandığım için apache24-conf parametresini kullandım.

root@cicek:/var/www# cd siremis-4.2.0/
root@cicek:/var/www/siremis-4.2.0# ls
ChangeLog  Makefile  misc  openbiz  README  siremis
root@cicek:/var/www/siremis-4.2.0# make apache24-conf
# siremis apache conf snippet ...

	Alias /siremis "/var/www/siremis-4.2.0/siremis"
	<Directory "/var/www/siremis-4.2.0/siremis">
		Options Indexes FollowSymLinks MultiViews
		AllowOverride All
		Require all granted
		<FilesMatch "\.xml$">
			Require all denied
		
		<FilesMatch "\.inc$">
			Require all denied
		
	

bu kodu apachenin 000-default.conf konfigürasyon dosyası içine ekliyoruz. ben şu an debian kullanıyorum ve bu dosyanın yeri /etc/apache2/sites-available/000-default.conf şeklinde.

root@cicek:/etc/apache2/sites-available# nano /etc/apache2/sites-available/000-default.conf 

gerekli değişiklik yapıldıktan sonra apache yi yeniden başlatıyoruz.

root@cicek:/etc/apache2/sites-available# service apache2 restart 

bundan sonra gerekli erişim ve yetki ayarlamalarını yapılabilmesi için prepare ve chown parametrelerini işletiyoruz.

root@cicek:/var/www/siremis-4.2.0# make prepare
updating htaccess file...
updating app.inc file...
creating folders...
done

root@cicek:/var/www/siremis-4.2.0# make chown
changing onwner to www-data:www-data ...
chown -R www-data:www-data .

şimdi internet tarayıcımızdan http://locahost/siremis/ adresine erişim testi yapalım. erişim testi başarılı ise sıra siremis için mysql kullanıcı erişim ayarlarının yapılmasına geldi.

root@cicek:/var/www/siremis-4.2.0# mysql  -u root -p 
Enter password: 

mysql> GRANT ALL PRIVILEGES ON siremis.* TO siremis@localhost IDENTIFIED BY 'siremisrw';
Query OK, 0 rows affected (0.05 sec)

kanailio nunda tabiki mysql eklentisinin aktif edilmiş ve ayarlarının yapılmış olması gerekmektedir. eğer yok ise kuralım ve kurulum sonrası /etc/kamailio/kamctlrc dosyası üzerinde mysql aktif eder mysql ile ilgili ayarlarıda yapalım.

root@cicek:/etc/kamailio# apt-get install kamailio-mysql-modules 
root@cicek:/etc/kamailio# ls
dictionary.kamailio    kamailio-basic.cfg  kamctlrc
kamailio-advanced.cfg  kamailio.cfg        pi_framework.xml
root@cicek:/etc/kamailio# nano kamctlrc 
DBENGINE=MYSQL
DBHOST=localhost
DBNAME=kamailio
DBRWUSER="kamailio"
DBRWPW="kamailiorw"
DBROUSER="kamailioro"
DBROOTUSER="root"

sonrasında ysql veri tabanı ile ilgili işlemlerin yapılması için kamailionun kamdbctl aracını çalıştıralım

root@cicek:/etc/kamailio# kamdbctl create
MySQL password for root: 
INFO: test server charset
INFO: creating database kamailio ...
INFO: granting privileges to database kamailio ...
INFO: creating standard tables into kamailio ...
INFO: Core Kamailio tables succesfully created.
Install presence related tables? (y/n): y
INFO: creating presence tables into kamailio ...
INFO: Presence tables succesfully created.
Install tables for imc cpl siptrace domainpolicy carrierroute
		userblacklist htable purple uac pipelimit mtree sca mohqueue
		rtpproxy? (y/n): y
INFO: creating extra tables into kamailio ...
INFO: Extra tables succesfully created.
Install tables for uid_auth_db uid_avp_db uid_domain uid_gflags
		uid_uri_db? (y/n): y
INFO: creating uid tables into kamailio ...
INFO: UID tables succesfully created.
root@cicek:/etc/kamailio# 

buraya kadar sorunsuz olarak geldiyseniz sıre siremisin web arayüzünden kurulumu tamamlamaya geldi.

http://locahost/siremis/ adresinden aşagıdaki ekran görüntülerinde yer aldığı gibi gerekli verileri girerek tamamlıyoruz.

siremis1

siremis2

siremis3

siremis4

siremis5

siremis6

siremis artık kullanıma hazırdır. ancak

[{"target":"ERROR","content":"
\n[2015-07-03 10:01:48 (GMT)] An exception occurred while executing this script:
\nError message: #8192, Non-static method BizSystem::getConfiguration() should not be called statically, assuming $this from incompatible context< \/font>
\nScript name and line number of error: \/var\/www\/siremis-4.2.0\/openbiz\/bin\/data\/BizDataObj_Abstract.php:268< \/font>
\n

hatasını veya benzer hataları alacak olursanız https://github.com/asipto/siremis üzerinden en sonra halini indirerek denemenizi öneririm.

bunlardan sonra siremiz altındaki install klasörünü silmeniz önerilmektedir.

raspberry üzerinden okunan verinin python ile mysqle eklenmesi ve google chart ile bu verinin grafiğinin oluşturulması örneği

daha önceki örneklerimizde raspberry nin sistem özelliklerini okumayı ve bu verileri rrd veri tabanına kaydetmeyi ve izlemesi konusunda örnekler yapmıştık.

bu yöntemin uygun olmayacağı veya istenmeyeceği durumlar olabilir. böyle bir durum olduğunu düşünerek okuduğumuz cpu sıcaklık değerini bir veri tabanına (örneğimizde mysql olacak) kaydedelim ve dinamik bir arayüz ile veri tabanına kaydettiğimiz verileri kullanıcılarımız sunacağımız bir uygulama geliştirelim.

öncelikle veri tabanımızda hangi verilerin olacağını belirlemeli ve veritabanımızı oluşturmalıyız. raspberry pinin klasik dağıtımları üzerinde mysql, php, apache gibi sunucu yazılımları mevcut değil. bunları kurmanız gerektiğini unutmayınız. internette konu hakkında dokümanlar mevcut. uygun bir zamanda detaylı olarak onuda ekleyebiliriz. bunların olduğunu var sayarak esas konumuza dönelim.

bu örneğimizde tarih ve saat verisinin yanında sadece sıcaklık değerini tutmamız yeterli olacaktır.

sudo mysql -u root -p

CREATE DATABASE raspberry_sistem;
USE raspberry_sistem;

CREATE TABLE cpu_temp ( id INT NOT NULL AUTO_INCREMENT,
                      tarih DATE NOT NULL,
                      saat TIME NOT NULL,
                      sicaklik varchar(50),
                      PRIMARY KEY ( id ));

GRANT INSERT,SELECT ON raspberry_sistem.* TO 'raspberry'@'localhost' IDENTIFIED BY 'pi';
FLUSH PRIVILEGES;

artık veritabanımız hazır. sıra sıcaklık değeri okuyarak veri tabanına eklemeye geldi. ben örneğimi python kullanarak yapacağım. benim kullandığım python kütüphaneleri sizin raspberry üzerinde olmayabilir. kodun çalışması için eksik kütüphaneleri yüklemeniz gerekmektedir.

#sicaklik_cpu.py  dosyasi
import time
import os
import fnmatch
import MySQLdb as mdb
import logging
import time
import datetime

#cpu sicaklik degerinin okunmasi
def cpu_sicaklik_oku():
 res = os.popen('vcgencmd measure_temp').readline()
 return(res.replace("temp=","").replace("'C\n",""))


#mysql veritabanina veri eklenmesi
def insertDB(cpu_sicaklik):
  sql = "INSERT INTO cpu_temp (tarih, saat, sicaklik) VALUES ('%s', '%s', '%s' )" % (time.strftime("%Y-%m-%d"), time.strftime("%H:%M"), cpu_sicaklik)

  try:

    con = mdb.connect('localhost', 'raspberry', 'pi', 'raspberry_sistem');
    cursor = con.cursor()
    cursor.execute(sql)
    con.commit()
    con.close()

  except mdb.Error, e:
    logger.error(e)

#sicaklik okuma ve veritabanina yazma fonksiyonlarini calistiralim
cpu_sicaklik = float(cpu_sicaklik_oku())
print cpu_sicaklik
insertDB(cpu_sicaklik)

kodun oldukça sadece ve anlaşılır olduğunuz düşüyorum. temel olarak sıcaklık verisinin okunmasını ve bu verinin veri tabanına eklenmesini sağlayarak iki ayrı fonksiyon oluşturduk. ve bu fonksiyonları sırası ile çağırıyoruz.

komut satırından kodumuzu test edelim.

pi@cicek /var/www/raspberry $ sudo python sicaklik_cpu.py 
54.1

sıcaklık değeri okundu ve ekrana yazıldı ve herhangi bir hata vermedi. kontrol için eklediğimiz kodu “print cpu_sicaklik” her şey tamam olduktan sonra kaldıracağız. veri tabanına gerekli veri girişi doğru şekilde yapıldığının kontrolünü de yapalım.

mysql> select * from cpu_temp;
Empty set (0.01 sec)

mysql> select * from cpu_temp;
+----+------------+----------+----------+
| id | tarih      | saat     | sicaklik |
+----+------------+----------+----------+
|  1 | 2015-07-19 | 22:35:00 | 54.1     |
+----+------------+----------+----------+
1 row in set (0.00 sec)

kodumuz sağlıklı olarak çalışıyor. şimdi bu işlemi otomatikleştirmek için crontab içine yerleştirelim.

pi@cicek /etc $ cat /etc/crontab 

*/5 *  * * *   root    sudo python /var/www/raspberry/sicaklik_cpu.py

5 dakika bir çalışacak şekilde gerekli ilavemizi de yaptıktan sonra sıra kullanıcı arayüzüne geldi. grafik çizimi için google chart servisini line chart kullanacağım. detaylı bilgiyi https://developers.google.com/chart/interactive/docs/gallery/linechart adresinden alınabilir.

bu servis sayesinde grafik kütüphaneleri ile fazla uğraşmayacağım ve işimi kolayca halledeceğim.

<!DOCTYPE html>


	<script type="text/javascript" src="https://www.google.com/jsapi"></script>
		<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
		<script type="text/javascript">
			google.load('visualization', '1', {'packages':['corechart']});
			google.setOnLoadCallback(drawChart);

			function drawChart() {
				var json = $.ajax({
					url: 'get_json.php', 
					dataType: 'json',
					async: false
				}).responseText;
				
				var data = new google.visualization.DataTable(json);
				var options = {
					title: 'Raspberry CPU Sicaklik',
					width: 600,
					height: 400
				};
				var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
				chart.draw(data, options);

				setInterval(drawChart, 500 );
			}
		</script>  



  <div id="chart_div" style="width: 600px; height: 400px;"></div>

yukarıdaki kodu index.html olarak kaydelim ve esas işi yapacak get_json.php php dosyamızı da oluşturalım

<?php

$con = mysql_connect('localhost', 'raspberry', 'pi') or die('veri tabani baglanti hatasi');
mysql_select_db('raspberry_system', $con); 
$query = mysql_query('SELECT * FROM cpu_temp');

$table = array();
$table['cols'] = array(
    array('label' => 'saat', 'type' => 'string'),
	array('label' => 'sicaklik', 'type' => 'number')
);

$rows = array();
while($r = mysql_fetch_assoc($query)) {
    $tempa = array();
	$tempa[] = array('v' => $r['saat']);
	$tempa[] = array('v' => (int) $r['sicaklik']); 
    $rows[] = array('c' => $tempa);
}

$table['rows'] = $rows;

$jsonTable = json_encode($table);

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
header('Content-type: application/json');

echo $jsonTable;
?>

adres satırına raspberry adresini yazdığımızda göreceğimiz grafik aşağıdaki gibi olacaktır.

godaddy drupal PDOException hatası

eğer godaddy suncuuları üzerindeki sitelerinizde aşağıdaki hata ile karşılaşırsanız herhangi bir database inizin şifresini güncelleyiniz. tüm sitelerinizdeki alınan hata ortadan kalkacak.. godaddy saçmalığı…

PDOException: SQLSTATE[HY000] [2013] Lost connection to MySQL server at ‘reading initial communication packet’, system error: 111 in lock_may_be_available() (line 167 of /html/www/includes/lock.inc).

 

 

mysql update – replace

mysqlde bir tablo içinde bir alanda değerleri değiştirmek istiyorsak aşağıdaki betik kullanılabilir

update TABLO_ADI set ALAN_ADI = replace(ALAN_ADI, ‘aranilan – eski kelime’, ‘yeni kelime’);

MySQL artık Sun ın

Bugün haber sitelerine düşen bir habere göre Sun MySQL i 1 milyar $ a satın almış. Sun tarafından mevcut lisans ve açık kaynak durumunun aynı şekilde devam edilecegi açıklanmış.

Peki bundan sonra ne olacak, tabiki PostgreSQL üzerine daha fazla kafa zaman harcıyacagız ve en kısa zamanda mevcut siteleri PostgreSQL üzerine taşımak gerekecek.

python ile mysql’e bağlanma

Python ile MySQL e bağlanmak için sistemizde MySQLdb kütüphanesi olmalı. Bu kütüphane ile mysql veritabanı üzerinde işlem yapmak oldukça kolaylaşıyor. Aşağıda basit mysql örneği gözükmektedir.

try:
import MySQLdb
except ImportError:
sys.exit( "MySQLdb modulu gerekli - bulunamadi" )
''' MySQLdb nin sistemde varlığını kontrol ederek bağlıyoruz'''
db_hostname="benim_sunucum"
db_database="benim_veritabanım"
db_username="benim_veritabani_kullanici_adim"
''' vertabanı tanımlamalarını yapıyoruz'''
dbcon=MySQLdb.connect(host=db_hostname,user=db_username,db=db_database )
'''veritabanına bağlantı kuruyoruz'''
cursor=dbcon.cursor()
sql = """SELECT * FROM benim_tablom"""
cursor.execute(sql)
'''sql soruusunu işletiyoruz'''
data = cursor.fetchone()
field = cursor.description
'''sql sorgusu sonucu donen verinin ilk satirini aliyoruz'''
cursor.close()
dbcon.close()
'''veritabanı bağlantısını sonlandırıyoruz'''
print data
'''veriyi yazdırıyoruz'''
Back To Top