Skip to content

basit bir örnekle raspberry pi üzerinde rrdtool kullanımı

rrdtool un kullanma mantığının temel olarak

  • veri tabanının  oluşturulması.
  • veriyi toplayacak yazılımın gerçekleştirilmesi
  • düzenli aralıklarla bu veriyi toplanması ve veri tabanına eklenmesi
  • veri tabanına giriş yapıldıktan sonra görüntülenmesi istenilen grafikleri oluştur
  • oluşturulan grafiklerin görüntüleneceği bir arayüz  meydana getirilmesi

adımlarından oluşturuğu söylenebilir. şimdi bu adımları uygulayacağımız basit bir sıcaklık uygulaması örneği yapalım. rrd uygulamamızda kullanacağımız rdd veri tabanı yapısını oluşturalım.

#!/bin/bash
rrdtool create sicaklik_rrd.rrd --start N --step 300 \
DS:sicaklik_veri:GAUGE:600:U:U \
RRA:AVERAGE:0.5:1:12 \
RRA:AVERAGE:0.5:1:288 \
RRA:AVERAGE:0.5:12:168 \
RRA:AVERAGE:0.5:12:720 \
RRA:AVERAGE:0.5:288:365

sıra geldi veri toplama ve elde edilen veriyi veritabanına ekleyecek yazılım kısmına.

#!/bin/bash
DIZIN="/var/www/sicaklik"

sicaklik ="curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
grep -Po ' M?\d{2} ' |  \
sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'";

$rrd = `/usr/bin/rrdtool update $DIZIN/sicaklik_rrd.rrd N:$sicaklik`;

ile kayseri-erkilet için sıcaklık bilgisi çekilerek rrd dosyasına ekleniyor. şimdi sıra bu işlemi otomatik olarak yaptırmaya geldi.

pi@raspberrypi $ cat /etc/crontab 
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
*/5 *  * * *   root    /var/www/sicaklik/sicaklik.sh

artık 5 dakikada bir bu script çalışarak rrd veritabanı dosyamız güncellenecek. şimdi sıra veritabanından kullanacağımız grafiklerin oluşturulmasına geldi.

#!/bin/bash
DIZIN="/var/www/sicaklik"

sicaklik_birimi="C"
sicaklik_cizgi_rengi="#0000FF"

#saat
rrdtool graph $DIZIN/sicaklik_saat.png --start -4h \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \
GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s"

#gun
rrdtool graph $DIZIN/sicaklik_gun.png --start -1d \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]" \
GPRINT:sicaklik_veri:LAST:"Anlik Sicaklik\:%8.2lf %s" \
GPRINT:sicaklik_veri:MAX:"Maksimum Sicaklik\:%8.2lf %s" \
GPRINT:sicaklik_veri:MIN:"Minimum Sicaklik\:%8.2lf %s"

#hafta
rrdtool graph $DIZIN/sicaklik_hafta.png --start -1w \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

#ay
rrdtool graph $DIZIN/sicaklik_ay.png --start -1m \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

#yil
rrdtool graph $DIZIN/sicaklik_yil.png --start -1y \
DEF:sicaklik_veri=$DIZIN/sicaklik_rrd.rrd:sicaklik_veri:AVERAGE \
LINE1:sicaklik_veri$sicaklik_cizgi_rengi:"Sicaklik [deg $sicaklik_birimi]"

artık işlem neredeyse bitti. burada grafik oluşturmayı farklı bir dosya gibi gösterdim ancak sicaklik verisini çektiğimiz ve veritabanına eklediğimiz script içinde olması işimi kolaylaştıracaktır. aksi halde bu dosyası da belirli zaman aralıkları ile çalıştırmamız gerekecektir.

şimdi sıra oluşturdugumuz grafikleri göstereceğimiz html dosyasını oluşturmaya geldi.

Raspberry Pi ile RRD örneği

Last Modified: < ?=$lastmod?>

Hourly

Daily

Weekly

Monthly

Yearly



olay aslında bu kadar basit. daha dinamik bir arayüz vb istiyorsak yapımızı buna göre oluşturmamız gerekmektedir. elde edeceğimiz günlük grafik ise aşağıdaki gibi olacaktır.

sicaklik_gun

hava durumu : linux komut satırı

linuxde komut satırından hava durumu bilgisine nasıl ulaşacağımızı ve bunu nasıl kullanacağımıza bakalım.

ücretli ve ücretsiz olarak hava durumu bilgisini sunan bir çok servis mevcut. yük doğruluk lu veri istiyorsanız bir miktar ücreti gözden çıkarmanız da fayda var. bu örnekte “National Weather Service” tarafından herkese açık olan kaynaklardan faydalanacağız. akıllı telefonlar ile hava durumu uygulamaları oldukça popüler hale geldi. her cihazda arka planda çalışan bir hava durumu uygulaması mevcut. bu şekilde bir uygulama yapmak geçiyorsa aklınızdan yapılacak temel işlemler aynı.

http://weather.noaa.gov/weather/TR_cc.html adresinden ülkemizde bilgi alınabilecek yerlerin listesini bulabilirsiniz. ben örneğimde Kayseri – Erkilet havaalanı için verileri kullanacağım.  http://weather.noaa.gov/weather/current/LTAU.html adresinden  gün sayfalara ulaşabilirsiniz. burada LTAU kodu istasyona ait verilmiş özel bir kod.

buradaki kullanılan dosya formatları konusunda  http://www.ofcm.gov/fmh-1/fmh1.htm adresinden detaylı bilgi alabilirsiniz.

biz tabiki bu html dosyasını kullanmayacağız. yukarıda belirtilen standart çerçevesinde  http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.txt  adresinde dosya her 5 dakika bir güncellenmektedir.

2015/07/05 14:20
LTAU 051420Z 27007KT 240V300 9999 FEW040 28/08 Q1016 NOSIG

dosyanın içeriği yukarı şekilde. 28/08 yazan kısımdaki 28 bizim sıcaklık değerimiz. bu verinin doğruluğunu kontrol etmek için akıllı telefondan alınan ekran görüntüsünüde aşağıda paylaşalım

2015-07-05-17-45-54-1_resized

şimdi sıra LTAU.TXT dosyasından veriyi almak gerekli scripti yazmaya geldi.

curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
grep -Po ' M?\d{2}/M?\d{2} ' |  \
sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'

ben yukarıdaki gibi bir script yazdım. sizde farklı yöntemlerle istediğiniz veriyi ( nem, rüzgar gibi ) tabiki alabilirsiniz..

pi@raspberrypi ~ $ curl -s http://weather.noaa.gov/pub/data/observations/metar/stations/LTAU.TXT | \
> grep -Po ' M?\d{2}/M?\d{2} ' |  \
> sed -r   -e 's/([-0-9]*)\/[-0-9]*/\1/'
 28 
pi@raspberrypi ~ $

bu veriyi raspberry ile yapacağımız diğer uygulamalarda kullanacağımız için not etmekte fayda var.

raspberry pi – raspbian : kablosuz bağlantı ayarları

raspberrypimodelb

raspberry pi oldukça kullanışlı bir board ancak ne yazıkkı eski  modellerin üzerinde dahili bir wi-fi mevcut değil.

bu kısa yazıda elimizde “raspberry pi model b” olduğunu düşünerek piyasadan aldığımız bir usb wi-fi adaptör kullanarak kablosuz ağ bağlantısını gerçekleştirelim.

edineceğiniz adaptör ne kadar kaliteliyse ve tabiki linux driver desteği mevcuttsa bu işlem sırasında o kadar az sıkıntı ile karşılacağız.

bu işte kullanmak üzere girdiğimiz bir teknoloji marketinden bulduğum en ucuz adaptör olan tp-link tl-wn725n dan aldım. TL-WN725Nbu adaptör için alırken kontrol etmedim ancak linux altında gerekli driver ve patchler  varmış. yani ben kurulum sırasında çok fazla bir sorun yaşamaycağım. eğer sizde benzer bir iş için uğraçacaksanız öncelikle

http://elinux.org/RPi_USB_Wi-Fi_Adapters#Working_USB_Wi-Fi_Adapters

adresinden veya alternatif adreslerden alacağınız adaptörün uyumluluğunu kesinlikle kontrol edin.

raspberry nizi dış cihazlara bağlayacaksanız kesinlikle güç kaynağı ile birlikte kullanın. pc vb cihazlara usb den bağlayarak güç sağlarsanız raspberry boot olabilir ancak yeterli güç elde edilemezce wi-fi adaptörünüz v.b. düzgün çalışmayabilir, raspberry bu cihazları görmeyebilir.

bu kadar ön bilgiden sonra uygulaya gelelim.

öncelikle raspberrymiz usb portlarının durumuna bakalım.

pi@raspberrypi ~ $ lsusb 
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 

yukarıdan görüldüğü gibi raspberrymiz wi-fi adaptörümüzü görmemiş. öncelikle raspberry üzerindeki tüm güncellemelerimizi yapalım.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
pi@raspberrypi ~ $ sudo rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10185  100 10185    0     0  17477      0 --:--:-- --:--:-- --:--:-- 25590
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Remove old firmware backup
 *** Backing up firmware
 *** Remove old modules backup
 *** Backing up modules 3.18.11+
#############################################################
WARNING: This update bumps to rpi-4.0.y linux tree
Be aware there could be compatibility issues with some drivers
Discussion here:
https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=113753
##############################################################
Would you like to proceed? (y/N)
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   168    0   168    0     0    203      0 --:--:-- --:--:-- --:--:--   280
100 46.7M  100 46.7M    0     0   520k      0  0:01:31  0:01:31 --:--:--  282k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 4.0.7-v7+
 *** depmod 4.0.7+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to 19debdef5d132a12bf8df73d5e77e607066c8757
 *** A reboot is needed to activate the new firmware

 

rasrpberymizide reboot ettikten sonra usb üzerindeki kontrollerimiz yeniden yapalım.

pi@raspberrypi ~ $ lsusb
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0bda:8179 Realtek Semiconductor Corp. 

yukarıdaki şekilde bir çıktı ile karşılaşırsanız sorununuz düzelmiş ve raspberry wi-fi adaptörünüzü görüyor demektir. eğer sorun devam ediyorsa dogru driveri yükleyebilmek için kernel sürümü gerekecek.

pi@raspberrypi ~ $ uname -a
Linux raspberrypi 4.0.7+ #801 PREEMPT Tue Jun 30 18:15:24 BST 2015 armv6l GNU/Linux

şimdi doğru yazılımı bulalalım.

google ufak bir arama sonucu https://www.raspberrypi.org/forums/viewtopic.php?p=462982 adresine ulaşıyoruz. ve bu adresden “4.0.7+ #801” bilgisini kullanarak

4.0.7+ #801 – https://dl.dropboxusercontent.com/u/80256631/8188eu-20150630.tar.gz

dosyası bilgisine ulaşıyoruz. bu dosyayı indirdikten sonra içinen çıkan install.sh dosyasını çalıştırıp işlem sonrası raspberry mizi bir kez reboot ediyoruz.
 

pi@raspberrypi ~ $ wget https://dl.dropboxusercontent.com/u/80256631/8188eu-20150630.tar.gz
--2015-06-30 22:52:25--  https://dl.dropboxusercontent.com/u/80256631/8188eu-20150630.tar.gz
Resolving dl.dropboxusercontent.com (dl.dropboxusercontent.com)... 54.225.142.77, 54.235.132.16, 54.243.111.126, ...
Connecting to dl.dropboxusercontent.com (dl.dropboxusercontent.com)|54.225.142.77|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 389721 (381K) [application/octet-stream]
Saving to: `8188eu-20150630.tar.gz'

100%[=====================================================================================================================================================>] 389,721      531K/s   in 0.7s    

2015-06-30 22:52:34 (531 KB/s) - `8188eu-20150630.tar.gz' saved [389721/389721]

pi@raspberrypi ~ $ ls
8188eu-20150630.tar.gz  
pi@raspberrypi ~ $ tar -zxvf 8188eu-20150630.tar.gz 
8188eu.ko
8188eu.conf
install.sh
pi@raspberrypi ~ $ sudo ./install.sh 
sudo cp 8188eu.conf /etc/modprobe.d/.
sudo install -p -m 644 8188eu.ko /lib/modules/4.0.7+/kernel/drivers/net/wireless
sudo depmod 4.0.7+

Reboot to run the driver.

If you have already configured your wifi it should start up and connect to your
wireless network.

If you have not configured your wifi you will need to do that to enable the wifi.

bu işlemlerden sonra hata almaya devam ediyorsanız kontrol edilmesi gereken noktalar “modules” dosyası ve wi-fi ile ilgili konfigürasyon dosyalarıdır. benim kendis raspberry imdeki modules dosya içeriği aşagıdaki şekildedir.

pi@raspberrypi ~ $ cat /etc/modules 
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.

snd-bcm2835
8188eu 
8192cu

kablosuz ağ yapılandırması ile ilgili dosya konfigürasyonlarım ise aşağıdaki şekilde.

pi@raspberrypi ~ $ cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto eth0
allow-hotplug eth0
iface eth0 inet manual

auto wlan0
allow-hotplug wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf


auto wlan1
allow-hotplug wlan1
iface wlan1 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

 

interface dosyasında ip adresinin routeriniz dağıtıyor – otomatik almasını istiyorsanız ” iface wlan0 inet dhcp” olması gerekmektedir.

pi@raspberrypi ~ $ sudo cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
ssid="elektrik.gen.tr"
key_mgmt=WPA-PSK
psk="kablosuz_ag_sifrem"
}

tüm bu işlemlerden sonra ağ ayarlarının durumu izleyelim.
 

pi@raspberrypi ~ $ ifconfig 
eth0      Link encap:Ethernet  HWaddr 11:11:11:11:11:11
          inet addr:192.168.2.37  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2576 errors:0 dropped:2 overruns:0 frame:0
          TX packets:116 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:162187 (158.3 KiB)  TX bytes:8763 (8.5 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

wlan0     Link encap:Ethernet  HWaddr 22:22:22:22:22:22
          inet addr:192.168.2.24  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1124 errors:0 dropped:2 overruns:0 frame:0
          TX packets:2587 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:254667 (248.6 KiB)  TX bytes:301342 (294.2 KiB)

pi@raspberrypi ~ $  iwconfig 
wlan0     IEEE 802.11bgn  ESSID:"elektrik.gen.tr"  Nickname:""
          Mode:Managed  Frequency:2.447 GHz  Access Point: 18:28:61:38:49:9D   
          Bit Rate:72.2 Mb/s   Sensitivity:0/0  
          Retry:off   RTS thr:off   Fragment thr:off
          Power Management:off
          Link Quality=100/100  Signal level=100/100  Noise level=0/100
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

lo        no wireless extensions.

eth0      no wireless extensions.

sonuç olarak kablosuz ağımız aktif durumda. umarım yardımcı olur.

raspberry pi – raspbian ssh aktif edilmesi

raspberry ile çalışıyorsanız ssh in aktif olması olmazsa olmazlardan biridir. şimdi raspberry üzerine ssh sunucusu nasıl aktif edeceğimize bakalım.

raspberry nin konfigürasyon arayüzünü aktif çalıştıralım. bu arayüz ile konfigürasyon dosyaları ile uğraşmaya gerek kalmayacak. yazılım sürümüne göre ekran görüntüleri farklılık gösterebilir.

pi@raspberrypi ~ $ sudo raspi-config

açılan arayüzden “advanced options” seçilir

raspiconfigssh1

yeni açılan pencereden ssh seçilerek
raspiconfigssh2

açılan pencereler takip edilerek ssh aktif edilir.

raspiconfigssh3

raspiconfigssh4

ssh ımız aktif oldu. artk arayüzden “finish” diyerek çıkabilir.

raspiconfigssh5

arayüzden çıktıktan sonra komut satırını aşagıdaki şekilde göreceğiz.

pi@raspberrypi ~ $ sudo raspi-config 
update-rc.d: using dependency based boot sequencing
[ ok ] Starting OpenBSD Secure Shell server: sshd.

herşey güzel.. gerçekten ssh sunucumuz aktif mi kontrol edelim.

pi@raspberrypi ~ $ /etc/init.d/ssh status 
[ ok ] sshd is running.

ile sunucumuzun çalıştığı bilgisi alıyoruz. ip bilgisini ögrenelim ve gerçek bağlantı testimizi yapalım.

pi@raspberrypi ~ $ ifconfig
eth0 Link encap:Ethernet HWaddr 11:11:11:11:11:11
 inet addr:192.168.2.37 Bcast:192.168.2.255 Mask:255.255.255.0
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
 RX packets:777 errors:0 dropped:1 overruns:0 frame:0
 TX packets:557 errors:0 dropped:0 overruns:0 carrier:0
 collisions:0 txqueuelen:1000 
 RX bytes:60040 (58.6 KiB) TX bytes:89779 (87.6 KiB)

bundan sonra ssh bağlantımızı yapalım…

[c:\~]$ ssh pi@192.168.2.37


Connecting to 192.168.2.37:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Linux raspberrypi 3.18.11+ #781 PREEMPT Tue Apr 21 18:02:18 BST 2015 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 30 20:39:17 2015 from fcicek.local


pi@raspberrypi ~ $

artık raspberry de diğer işlerle uğraşabiliriz.

alcatel sr cihazlardaki kullanılabilecek lag / lacp sayıları

alcatel servis routerlarda gerçek dünyanın bir gerçeği olarak kullanılabilecek lag ve lacp sayılarında da bir sınır mevcut. geniş bir ağınız varsa bu sayılar bir süre sonra önemli olacaktır.

7450 ess-1 7450 ess-7 7750 sr-1 7750 sr-7/sr-12 7710 sr
laga eklenebilecek port sayısı 8 8 8 8 8
kullanılabilecek lag sayısı 64 200 64 200 64
kullanılabilecek lacp sayısı 256 256 256 256 256

 

örnekler üzerinden temel SNMP

snmp desteğine sahip cihazlardan veri alınması, yorumlanması ve cihazlara ait mib ve oid değerlerinin önemi kısaca anlatmaya çalışalım. teoriye girmeden uygulamalı olarak net-snmp kullanarak alcatel omniswitchler üzerinden ufak bir iki örnek yapalım.

burada unutulmaması gereken nokta kullanacağımız cihaza ait gerekli snmp ayarlarını yapmış olmamız gerekmektedir. örneğimizde snmp adında public de tam yetkili bir kullanıcı oluşturdum. kısaca snmp ile herşey serbest durumda.

ilk önce bağlantı yapabiliyormuyuz bir deneyelim.

$ snmpwalk -v 2c -c public 10.0.0.10 system
SNMPv2-MIB::sysDescr.0 = STRING: Alcatel-Lucent OS6850-U24X 6.4.4.604.R01::evenugop Service Release, October 09, 2013.
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.6486.800.1.1.2.1.7.1.10
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2836626900) 328 days, 7:31:09.00
SNMPv2-MIB::sysContact.0 = STRING: Alcatel-Lucent, http://alcatel-lucent.com/wps/portal/enterprise
SNMPv2-MIB::sysName.0 = STRING: alcatel_test_switch
SNMPv2-MIB::sysLocation.0 = STRING: Unknown
SNMPv2-MIB::sysServices.0 = INTEGER: 78                                                                                                           

testimiz başarılı oldu ve cihaza ait temel bilgileri getirmiş oldu. buradan cihazımızın 6850 ve aos 6.4.4 çalıştırdığını ögrenmiş olduk.

https://service.esd.alcatel-lucent.com/portal/page/portal/EService/product_specific_support_media?p=OmniSwitch_6850___6850E

adresinden cihaza ait mib dosyasını indirebilir ve buradan ögrendiğimiz bilgilerle daha özel bilgilere artık ulaşabiliriz.

şimdi switch üzerindeki arayüzlerin durumunu ögrenelim

$ snmpwalk -v 2c -c public 10.0.0.10 1.3.6.1.2.1.2.2.1.7
IF-MIB::ifAdminStatus.1001 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1002 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1003 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1004 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1005 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1006 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1007 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1008 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1009 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1010 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1011 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1012 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1013 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1014 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1015 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1016 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1017 = INTEGER: up(1)
IF-MIB::ifAdminStatus.1018 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1019 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1020 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1021 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1022 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1023 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1024 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1025 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1026 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1027 = INTEGER: down(2)
IF-MIB::ifAdminStatus.1028 = INTEGER: down(2)
IF-MIB::ifAdminStatus.13600001 = INTEGER: up(1)
IF-MIB::ifAdminStatus.13604098 = INTEGER: up(1)
IF-MIB::ifAdminStatus.13604099 = INTEGER: up(1)
IF-MIB::ifAdminStatus.40000001 = INTEGER: up(1)

listede switch üzerindeki tüm arayüzlerin admin up/down durumları görülmektedir. bilirli bir arayüze bakmak istiyorsak : örnek olarak 4.port

$ snmpwalk -v 2c -c public 10.0.0.10 1.3.6.1.2.1.2.2.1.7.1004
IF-MIB::ifAdminStatus.1004 = INTEGER: up(1)


$ snmpget -v 2c -c public 10.0.0.10 1.3.6.1.2.1.2.2.1.7.1004
IF-MIB::ifAdminStatus.1004 = INTEGER: up(1)

seçeneklerinden birini kullanacağız. aynı sorgulamayı switch üzerinden de gerçekleştirelim.

alcatel_test_switch-> show interfaces 1/4 port 
Legends: WTR - Wait To Restore
         #   - WTR Timer is Running & Port is in wait-to-restore state
         *   - Permanent Shutdown

Slot/    Admin     Link    Violations  Recovery   Recovery      WTR            Alias
Port     Status   Status                 Time       Max        (sec)
------+----------+---------+----------+----------+----------+----------+-----------------------------------------
  1/4    enable      down      none           300         10          0 ""

snmpwalk ve snmpget ile durum bilgisini getirmeyi ögrendik. iki komut arasındaki en temel fark snmpget ile nokta atışı yaparken snmpwalk ile ağacın alt dallarınada bakabiliyoruz.

mevcut bir veriyi nasıl değiştireceğiz sorusunun cevabı ise snmpset komutunda yatıyor

cihaz üzerinden

alcatel_test_switch-> interfaces 1/4 admin up

komutu ile gerçekleştirdiğimiz işlem için

$ snmpset -v 2c -c public 10.0.0.10 1.3.6.1.2.1.2.2.1.7.1004 i 1
IF-MIB::ifAdminStatus.1004 = INTEGER: up(1)

aynı port için

alcatel_test_switch-> interfaces 1/4 admin down 

komutu ile gerçekleştirdiğimiz işlem için

$ snmpset -v 2c -c public 10.0.0.10 1.3.6.1.2.1.2.2.1.7.1004 i 2
IF-MIB::ifAdminStatus.1004 = INTEGER: down(2)

yapısını kullanıyoruz. temelde olay bu kadar basit. snmp ile cihaz yönetimi konusunda temel mantığı uygulamalı olarak umarım anlatabilmişimdir. buradaki esas mantık cihazdaki mib yapısını iyi bilmek. bunun önemi anlamak için ufak bir örnek daha yapalım.

alcatel_test_switch-> show interfaces transceiver actual 
  Slot/Port   Temp (C)   Voltage (V)   Current (mA)   Output (dBm)   Input (dBm)  
------------+----------+------------+--------------+--------------+-------------
    1/1        45.0        3.317        6.626         -5.667           -Inf    
    1/3        42.0        3.315        6.614         -5.766           -Inf    
    1/10       38.0        3.318        6.424         -5.781           -Inf    
    1/17       44.0        3.314       16.464         17.927(AH)     -7.879  

test cihazımız üzerinden interfacelerin ddm özelliklerini listeleyelim. RX değerleri switch üzerinden şimdide snmp ile alalım. bunun için ddmRxOpticalPower objesine karşılık gelen değeri biliyor olmamız gerek. bu değer bu cihazda

enterprises.6486.800.1.2.1.5.1.1.2.5.1.21
1.3.6.1.4.1.6486.800.1.2.1.5.1.1.2.5.1.21

şeklinde. bu değeri ögrendikten sonra gerekli veriyi alalım.

$ snmpwalk -v 2c -c public 10.0.0.10  1.3.6.1.4.1.6486.800.1.2.1.5.1.1.2.5.1.21
SNMPv2-SMI::enterprises.6486.800.1.2.1.5.1.1.2.5.1.21.1001 = INTEGER: -2147483648
SNMPv2-SMI::enterprises.6486.800.1.2.1.5.1.1.2.5.1.21.1003 = INTEGER: -2147483648
SNMPv2-SMI::enterprises.6486.800.1.2.1.5.1.1.2.5.1.21.1010 = INTEGER: -2147483648
SNMPv2-SMI::enterprises.6486.800.1.2.1.5.1.1.2.5.1.21.1017 = INTEGER: -7879

yukarıdaki çıktıdan görüldüğü gibi dönen değerler ile cli üzerinden sorğuladığımız değerler kısmen alakalı görülüyor ancak %100 aynı değil. bu değerleri doğru şekilde yorumlayabilmek için alcatelin sayfasından indirdiğimiz mib dosyalarına ihtiyacımız olacak. bu dosyalara baktığımızda ddmRxOpticalPower objesi için aşağıdaki bilgi yer alıyor..

ddmRxOpticalPower              OBJECT-TYPE
    SYNTAX      Integer32 (-200000 | -40000..10000)
	UNITS       "thousandth of a dBm"
    MAX-ACCESS  read-only
    STATUS      current
    DESCRIPTION
        "The value of ddmRxOpticalPower indicates the current Received
         Optical Power of the SFP/XFP in 1000s of dBm.
		 A value of -200000 indicates this object is not applicable."
    ::= { ddmInfoEntry 21 }

yani bir nms uygulaması yazıyorsak elde edilen değeri 1000 e bölmemiz ve çıkan değer (-200000 | -40000..10000) dışında ise geçerli bir değer olmadığını bilmeliyiz.

huawei – aktif alarmların listelenmesi ve silinmesi

huawei cihazlarda cli üzerinden alarm yönetimi yapmak zorunda olduğunuz durumlar olabilir. bu örnekte ne40 serisi cihazlar üzerinden alarm yönetimi değilde daha çok mevcut alarmların listelenmesi ve bu alarmların silinmesine değineceğim. bunu ihtiyaç duyma nedenimiz huawei cihazları üzerindeki bazı yazılımsal sorunlar nedeniyle gerçekte bir sorun olmamasına karşın alarm bilgisinin silinmemesi ve/veya konfigürasyonun buna göre yapılmış olmasındadır.

“display alarm” kotumu cli üzerinden alarm izlemede kullanacağımız temel komuttur.

[huawe_ne40e]display  alarm all
----------------------------------------------------------------------------
Index  Level      Date      Time                        Info

1      Critical   15-05-07  13:04:31    The air filter is failed, Maybe it is 
                                        not cleaned as scheduled. Please clean
                                         it and run the reset dustproof run-ti
                                        me command[OID:1.3.6.1.4.1.2011.5.25.1
                                        29.2.1.9,BasCode:67995]
2      Error      15-03-09  12:53:37    LPU 1 is failed, Low Rx Pow ALM of SFP
                                        7 ALARM of PIC0 is abnormal[OID:1.3.6.
                                        1.4.1.2011.5.25.129.2.1.9,BasCode:67697]
----------------------------------------------------------------------------

yukarıdaki şekilde önceliklendirilmiş tüm alamları görebiliriz. bu listedeki alarmları temizlemek için clear komutu kullanılır ancak dikkat edilmesi gereken nokta konfigürasyon modunda olmamaktadır.

#huawe_ne40e>clear alarm index 2 send-trap 
Confirm to delete. continue?[Y/N]:Y
Info: Succeed in deleting the current alarm!

yukarı komut ile listelenen 2 numaralı alarm silinmiştir. send-trap komutu kullanılarak eğer bir nms kullanıyorsanız onuda tetiklemekte ve nms programında da alarm silinmektedir.

işin biraz daha ayrıntısına girecek olursak “display alarm active” ile cihaz üzerindeki tüm aktif alarmları görebiliriz.”display logbuffer” a kaydedilen verilerin kaynağı burasıdır diyebiliriz. yine “display alarm all” ile listenenen alarmlar burada yer almaktadır.

[huawe_ne40e]display  alarm active 
A/B/C/D/E/F/G/H/I/J
A=Sequence, B=RootKindFlag(Independent|RootCause|nonRootCause)
C=Generating time, D=Clearing time
E=ID, F=Name, G=Level, H=State
I=Description information for locating(Para info, Reason info)
J=RootCause alarm sequence(Only for nonRootCause alarm)

  36679/Independent/2015-02-25 15:45:38+02:00/-/0x701b2000/hwPimNeighborLoss/Major/Start/OID 1.3.6.1.4.1.2011.5.25.149.4.0.1 PIM neighbor loss. (NbrIntIndex=6, NbrAddrType=1, NbrAddr=127.0.0.1, NbrUpTime=1335409100, NbrIntName=GigabitEthernet2/0/0, InstanceID=0, InstanceName=public net, NeighborLossReason=1)
  36681/Independent/2015-02-25 17:02:51+02:00/-/0x502001/linkDown/Critical/Start/OID 1.3.6.1.6.3.1.1.5.3 Interface 6 turned into DOWN state.(AdminStatus=2,OperStatus=2,InterfaceName=GigabitEthernet2/0/0)
  39018/Independent/2015-03-09 12:53:41+02:00/-/0xff142808/hwEntityInvalid/Critical/Start/ OID 1.3.6.1.4.1.2011.5.25.129.2.1.9 Physical entity failed. (EntityPhysicalIndex=16843016, BaseTrapSeverity=2, BaseTrapProbableCause=67697, BaseTrapEventType=5, EntPhysicalContainedIn=16843008, EntPhysicalName="GigabitEthernet1/0/7", RelativeResource="", ReasonDescription="LPU 1 is failed, Low Rx Pow ALM of SFP7 ALARM of PIC0 is abnormal")

sistem her alarm için bir id üretmektedir ve listede en başta yer almaktadır. alarmları clear ederken bu sıra numarasını kullanmak zorundayız.

konfigürasyon modu açık iken “alarm” ile alarm yönetim konsulunu aktif etmemiz gerekmektedir. komutun temel kullanım yapısı aşağıdaki şekildedir.


[huawe_ne40e]alarm
[huawe_ne40e-alarm]clear alarm active sequence-number 36679

istisna durumlar hariç alarm kaynağına neden olan sorun düzeldikten sonra bu listeden otomatik olarak çıkarılacağını unutmamak gerekir.

Aşk okudum – aşk dokudum

Ben bu gönül tezgahında
Aşk dokudum, aşk okudum
Erenlerin dergahında
Aşk okudum, aşk dokudum

Her güçlüğü bile bile
Göznuruyla, sabır ile
Yumak yumak, çile çile
Aşk dokudum, aşk okudum

Bir ömür yana yakıla
Yazdığım sığmaz akla
Acımadım kırkdört yıla
Aşk okudum,aşk dokudum

Sevgi insanlığın özü
Odur aydınlatan bizi
Hak yolunda oldum terzi
Aşk dokudum, aşk okudum.

Günahından, sevabından
İçtim aşkın şarabından
Uluların kitabından
Aşk okudum, aşk dokudum

Aşk için şan da, şeref de
Okudum saplı bu hedefte
Yıllar yılı bir gergefte
Aşk dokudum, aşk okudum

Ümit Yaşar aşkla bende
Kötülük olmaz sevende
Bu can kaldıkça bu tende
Aşk okurum, aşk dokurum.

linux – ip adresinin öğrenilmesi

linux de bir ethernet arayüzünün ip adresinin ifconfig çıktısından inceleyerek bulabiliriz. ancak nokta atışı yapılması gereken zamanlar olabilir.

aşagıdaki örnekte adım adım incelenebilir.

fcicek@ubuntu:~$ ifconfig eth0 
eth0      Link encap:Ethernet  HWaddr 00:0c:29:68:00:00  
          inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe68:0000/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:388668 errors:0 dropped:0 overruns:0 frame:0
          TX packets:226787 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:506708018 (506.7 MB)  TX bytes:22826593 (22.8 MB)
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:'
          inet addr:192.168.126.128  Bcast:192.168.126.255  Mask:255.255.255.0
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:' | awk '{print$2}' 
addr:192.168.126.128
fcicek@ubuntu:~$ ifconfig eth0 | grep 'inet addr:' | awk '{print$2}' | cut -d: -f2
192.168.126.128

linuxte iç ve dış ip adresi değişimlerinin twitter hesabına gönderilmesi

dış dünyaya dinamik bir ip adresi ile çıkıyor ve olası ip değişimlerinden haberdar olmak istiyorsanız elbette bunun yapmanın çok fazla yöntemi var.

bu örnekte dhcp tarafından ip değişimlerinin alğılanarak twitter üzerinden gönderilmesi konusunda ufak bir örnek yapacağız.

twitter için yeniden bir yazılım yapmayacağız.. mevcut linux cli uygulamalarını kullanabiliriz. Bu örnekte tuby ile geliştirilen T yi kullancağız. https://github.com/sferik/t adresinden yazlım hakkında gerekli bilgilendirme alınabilir..

ruby nin installer yazılımını yükleyelim ve sonrasında ise T yazılımını yükleyelim.

fcicek@ubuntu:~$ sudo apt-get install ruby-dev
fcicek@ubuntu:~$ gem install t

twitter üzerinden bu işlem için kullanacağımız bir twitter hesabı oluşturalım ve bu hesap ile http://dev.twitter.com/apps/new adresinden yeni bir uygulama oluşturalım.

ve sonrasında uygulama erişim ayarlarını yönergeleri izleyerek yapalım.

fcicek@ubuntu:~$ t authorize
It looks like you ve already registered an application with Twitter.
To authorize a new account, just follow the steps below:
  1. Sign in to the Twitter Developer site.
  2. Select the application for which you d like to authorize an account.
  3. Copy and paste the consumer key and secret below when prompted.

Press [Enter] to open the Twitter Developer site. 

authorize işlemi tamamlandıktan sonra

fcicek@ubuntu:~$ t account

fcicek@ubuntu:~$ t whoami

ile hesap kontrollerini gerçekleştirelim. ve sonrasında test için mesaj gönderelim

fcicek@ubuntu:~$ t dm ferhatcicek test
Direct Message sent from @fcicekcli to @ferhatcicek.

twitterin istemci yazılımı ile ilgili kısımları tamamladıktan sonra en önemli kısıma geldi. dhcp nin olduğu bölümü ögrendikten sonra dhclient.conf konfigürasyon dosyası içinde gerekli düzenlemeleri yapalım.

fcicek@ubuntu:~$ whereis dhcp
dhcp: /etc/dhcp

dhclient.conf dosyası /etc/dhcp/ dizini altında yer almaktadır. konfigürasyon dosyası içerisinde dhclient-script dosyasının aktif edilmesi gerekmektedir. (dizin yapısı ile ilgili sorun olabilir. )

fcicek@ubuntu:/etc/dhcp$ whereis dhclient-script
dhclient-script: /sbin/dhclient-script /usr/share/man/man8/dhclient-script.8.gz

dosyanın doğru yerini ögrendikten sonra dhclient.conf dosyası içinde

fcicek@ubuntu:/etc/dhcp$ vi dhclient.conf 

script "/sbin/dhclient-script";

gerekli düzenlemeyi tamamlayalım ve bir sonraki adıma geçelim.

fcicek@ubuntu:/etc/dhcp$ ls
dhclient.conf  dhclient-enter-hooks.d  dhclient-exit-hooks.d

dhclient-enter-hooks.d dizini içine çalışacak olan scriptimiz yarattığınız zaman olay tamamlanmıştır..

vi tt

PRIVATE_IP=$(ifconfig |grep -B1 "inet addr" |awk '{ if ( $1 == "inet" ) { print $2 } else if ( $2 == "Link" ) { printf "%s:" ,$1 } }' |awk -F: '{ print $1 ": " $3 }')
PUBLIC_IP=$(dig -4 @ns1-1.akamaitech.net -t a whoami.akamai.net +short)

/usr/local/bin/t   dm @ferhatcicek "$PRIVATE_IP \n ip: $PUBLIC_IP"
Back To Top