08/09/2017 - LINUX
Bu örneğimizde InfluxDB ve Grafana servislerini aynı sunucu (Ubuntu 16.04) üzerine kurup, Grafana ile InfluxDB'de bulunan verileri görselleştireceğiz. Versiyon olarak InfluxDB 1.3.5
ve Grafana 4.4.3
kullanacağız.
Bu yazdığım zaman, InfluxDB zaman tabanlı verileri tutmak için en fazla kullanılan ve en performanslı çalışan veritabanıydı.
InfluxDB varsayılan olarak:
Port ilişkilendirme ve diğer konfigürasyonlar için /etc/influxdb/influxdb.conf
dosyasını kullanabilirsiniz. Logları görmek için journalctl -u influxdb
komutunu çalıştırabilirsiniz.
Not: Eğer veriler başka bir sunucudan InfluxDB'ye iletiliyorsa, her iki sunucunun tarihlerinin aynı olmasına dikkat edin. Senkronizasyon işlemi için Network Time Protocol (NTP) kullanabilirsiniz. Eğer bu işlemi yapmazsanız, veri gönderme ve alma tarihleri arasında uyuşmazlık olacaktır, ki bu da raporlama da tutarsızlığa sebebiyet verecektir. Tarih UTC format olarak tutulur. Tarih kontrolü için date
komutunu kullanabilirsiniz.
Eğer InfluxDB için bir web arayüzü isterseniz, Chronograf yükleyip kullanabilirsiniz.
InfluxDB kütüphanesini ekleyelim.
$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
$ source /etc/lsb-release
$ echo "deb https://repos.influxdata.com/${DISTRIB_ID,,} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list
InfluxDB servisini yükleyip çalıştıralım.
$ sudo apt-get update
$ sudo apt-get install influxdb
$ sudo service influxdb start
Eğer influxd
komutunu çalıştırırsanız, servis ile ilgili temel bilgileri göreceksiniz. Eğer influxd config
komutunu çalıştırırsanız, servisin varsayılan konfigürasyon bilgilerini göreceksiniz.
Not: Varsayılan olarak herhangi bir kullanıcı doğrulama işlemine tabi tutulmadan, veri tabanına bağlanıp istediğiniz komutu çalıştırabilirsiniz. Kullanıcı doğrulama işlemini daha sonra aktif hale getireceğiz.
Veritabanına bağlanalım.
$ influx
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
>
Mevcut olan kullanıcıları kontrol edelim. Varsayılan olarak herhangi bir kullanıcı olmaması lazım.
> SHOW USERS
user admin
---- -----
>
Mevcut olan veritabanlarını kontrol edelim.
> SHOW DATABASES
name: databases
name
----
_internal
>
_internal
veritabanındaki tabloları kontrol edelim.
> USE _internal
Using database _internal
> SHOW MEASUREMENTS
name: measurements
name
----
cq
database
httpd
queryExecutor
runtime
shard
subscriber
tsm1_cache
tsm1_engine
tsm1_filestore
tsm1_wal
write
>
_internal
veritabanı içindeki httpd
tablosunu sorgulayalım.
> SELECT * FROM httpd
>
InfluxDB'den çıkalım.
> EXIT
Aşağıdakileri yaparak veritabanına kullanıcı doğrulaması olmadan yapılan bağlantıları engelleyelim. Bir tane admin kullanıcı yaratıp, sadece onun veritabanına kullanıcı adı ve şifresiyle ulaşımını sağlayacağız.
Gerekli haklarla kullanıcıyı yaratalım.
$ influx
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
>
> CREATE USER inanzzz WITH PASSWORD '123123' WITH ALL PRIVILEGES
>
> SHOW USERS
user admin
---- -----
inanzzz true
>
> EXIT
Konfigürasyon dosyası /etc/influxdb/influxdb.conf
içinden auth-enabled
girdisini bulup, auth-enabled = true
olarak ayarlayın.
Servisi yeniden başlatın.
$ sudo service influxdb restart
Kullanıcı adı ve şifresi kullanmadan yapılan bağlantılarda, listeleme işlemi bile yapılamaz durumda.
$ influx
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
>
> SHOW DATABASES
ERR: unable to parse authentication credentials
Warning: It is possible this error is due to not setting a database.
Please set a database with the command "use".
Kullanıcı adı ve şifresi kullanılarak yapılan bağlantılarda, herşey normal olarak çalışıyor.
$ influx -username inanzzz -password 123123
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
>
> SHOW DATABASES
name: databases
name
----
_internal
>
Aşağıdaki işlem ile CPU ile ilgili istatistikleri tutmak için:
server_stats
isminde bir veritabanı yaratacağız.cpu
isminde bir de tablo yaratacağız.Daha sonra sorgularımızda kullanmak için verilere:
host
etiketi atayacağız.region
etiketi atayacağız.Bunun faydası, istatistikleri birbirlerinden host
veya region
olarak ayırabilmemizi sağlayacak. Daha sonra value
alanına istatistik değeri olarak float veriler atayacağız.
Not: Eğer isterseniz veri ile birlikte manuel olarak Unix nanosecond timestamp bilgisini de gönderebilirsiniz. Eğer bunu yapmazsanız, sistem saati kullanılacaktır.
Eğer daha teknik olarak açıklayacak olursak, işlem sonucunda aşağıdakine benzer birşey yapabileceğiz.
SELECT value FROM server_stats.cpu WHERE host = 'server01'
SELECT value FROM server_stats.cpu WHERE host = 'server01' AND/OR region = 'europa'
Veritabanını yaratalım.
$ curl -i -XPOST http://localhost:8086/query -u inanzzz:123123 --data-urlencode "q=CREATE DATABASE server_stats"
Tablo yaratıp içini test verileriyle dolduralım. Tablo mevcut değilse otomatik olarak yaratılacaktır.
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server01,region=europa value=0.01 1504879906'
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server01,region=europa value=0.01 1504879943'
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server01,region=europa value=0.02'
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server02,region=europa value=1.00 1504879906'
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server02,region=europa value=1.00 1504879943'
$ curl -i -XPOST 'http://localhost:8086/write?db=server_stats' -u inanzzz:123123 --data-binary 'cpu,host=server02,region=europa value=2.00'
Yukarıda da gördüğümüz gibi, europa
bölgesine ait olan server01
ve server02
ile ilgili ayrı ayrı bilgiler girdik. İlk iki veri seti ile, her iki sunucu için aynı saat bilgisi verilirken, sonuncu veri seti ile sistem saati kullanıldı.
$ influx -username inanzzz -password 123123
Connected to http://localhost:8086 version 1.3.5
InfluxDB shell version: 1.3.5
>
> SHOW DATABASES
name: databases
name
----
_internal
server_stats
>
> USE server_stats
Using database server_stats
>
> SHOW MEASUREMENTS
name: measurements
name
----
cpu
>
> SELECT * FROM cpu
name: cpu
time host region value
---- ---- ------ -----
1504879906 server01 europa 0.01
1504879906 server02 europa 1
1504879943 server01 europa 0.01
1504879943 server02 europa 1
1504880003297061860 server01 europa 0.02
1504880123219102389 server02 europa 2
Verileri görselleştirme haricinde, uyarıda bulunma gibi işlemler içinde kullanılır. Örneğin: Slack, email vs.
Paketin indirilelim.
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.4.3_amd64.deb
$ sudo apt-get install -y adduser libfontconfig
$ sudo dpkg -i grafana_4.4.3_amd64.deb
InfluxDB kütüphanesini ekleyelim.
$ echo "deb https://packagecloud.io/grafana/stable/debian/ jessie main" | sudo tee -a /etc/apt/sources.list
$ curl https://packagecloud.io/gpg.key | sudo apt-key add -
Grafana servisini kurup başlatalım.
$ sudo apt-get update
$ sudo apt-get install grafana
$ sudo service grafana-server start
Tarayıcıdan http://192.168.99.30:3000
adresine gidin ve admin:admin
ile login olun.
Tarayıcıdan http://192.168.99.30:3000
adresine gidin ve admin:admin
ile login olun.
Sol üst köşedeki Grafana ikonuna tıklayıp "Data Sources" seçeneğini seçerseniz, aşağıdakine benzer bir şey göreceksiniz.
Eğer auto-refresh seçeneğini aktif hale getirip, veritabanını daha fazla veri ile doldurursanın, grafiğin gerçek zamanlı olarak yenilendiğini göreceksiniz. Aşağıdaki komut ile server02
'ye karşılık gelen daha fazla veri ekleyip grafiğe doğrulama amaçlı olarak bakabilirsiniz.
$ for((i=1;i<=10;i+=1)); do curl -XPOST "http://localhost:8086/write?db=server_stats" -u inanzzz:123123 --data-binary "cpu,host=server02,region=europa value=$i.00"; sleep 5; done
Grafik sonuçta aşağıdakine benzer bir hal alacaktır.