Zabbix install & monitoring

Merhaba, bu yazımda açık kaynak izleme aracı olan zabbix’in kurulumu ve bir kaç örnekle (postgresql, iis, system resources) monitor eklemeyi anlatacağım.
Kullanılan kaynaklar : Centos 7 (4 core CPU, 6 GB RAM, 50 GB hdd), postgresql-11, zabbix 3.4
Zabbix yum repo ve sonrasında setup için :
[root@zabbix01 ~]# rpm -Uvh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
yum install zabbix-server-pgsql zabbix-web-pgsql zabbix-agent zabbix-get
……
Installed:
zabbix-get.x86_64 0:3.4.15-1.el7 zabbix-server-pgsql.x86_64 0:3.4.15-1.el7 zabbix-web-pgsql.noarch 0:3.4.15-1.el7
Dependency Installed:
OpenIPMI-libs.x86_64 0:2.0.23-2.el7 OpenIPMI-modalias.x86_64 0:2.0.23-2.el7 apr.x86_64 0:1.4.8-3.el7_4.1
apr-util.x86_64 0:1.5.2-6.el7 dejavu-fonts-common.noarch 0:2.33-6.el7 dejavu-sans-fonts.noarch 0:2.33-6.el7
fontpackages-filesystem.noarch 0:1.44-8.el7 fping.x86_64 0:3.10-1.el7 gnutls.x86_64 0:3.3.29-9.el7_6
httpd.x86_64 0:2.4.6-89.el7.centos.1 httpd-tools.x86_64 0:2.4.6-89.el7.centos.1 iksemel.x86_64 0:1.4-2.el7.centos
libX11.x86_64 0:1.6.5-2.el7 libX11-common.noarch 0:1.6.5-2.el7 libXau.x86_64 0:1.0.8-2.1.el7
libXpm.x86_64 0:3.5.12-1.el7 libevent.x86_64 0:2.0.21-4.el7 libjpeg-turbo.x86_64 0:1.2.90-6.el7
libxcb.x86_64 0:1.13-1.el7 libzip.x86_64 0:0.10.1-8.el7 mailcap.noarch 0:2.1.41-2.el7
net-snmp-libs.x86_64 1:5.7.2-38.el7_6.2 nettle.x86_64 0:2.7.1-8.el7 php.x86_64 0:5.4.16-46.el7
php-bcmath.x86_64 0:5.4.16-46.el7 php-cli.x86_64 0:5.4.16-46.el7 php-common.x86_64 0:5.4.16-46.el7
php-gd.x86_64 0:5.4.16-46.el7 php-ldap.x86_64 0:5.4.16-46.el7 php-mbstring.x86_64 0:5.4.16-46.el7
php-pdo.x86_64 0:5.4.16-46.el7 php-pgsql.x86_64 0:5.4.16-46.el7 php-xml.x86_64 0:5.4.16-46.el7
postgresql-libs.x86_64 0:9.2.24-1.el7_5 t1lib.x86_64 0:5.1.2-14.el7 trousers.x86_64 0:0.3.14-2.el7
unixODBC.x86_64 0:2.3.1-11.el7 zabbix-web.noarch 0:3.4.15-1.el7
Complete!
[root@zabbix01 ~]#
setup işleminden sonra, “[root@DEV-CONT01 zabbix]# vi /etc/zabbix/zabbix_server.conf” altındaki konfigürasyon dosyasında aşağıdaki değişiklikleri yapalım.
#### zabbix server’ın log dosyas path’i ####
LogFile=/var/log/zabbix/zabbix_server.log
#### monitoring metriklerinin saklanacağı veritabanı konfigürasyonu ####
DBName=zabbix
DBUser=zabbix
konfigürasyon tanımlarını yaptıktan sonra, zabbix-server servisini çalıştırabiliriz.
[root@zabbix ~]# systemctl start zabbix-server
[root@zabbix ~]# tail -f /var/log/zabbix/zabbix_server.log
10174:20190826:153833.175 server #19 started [poller #3]
10177:20190826:153833.180 server #22 started [unreachable poller #1]
10183:20190826:153833.182 server #27 started [trapper #5]
10178:20190826:153833.185 server #23 started [trapper #1]
10180:20190826:153833.185 server #25 started [trapper #3]
10182:20190826:153833.187 server #26 started [trapper #4]
10185:20190826:153833.190 server #28 started [icmp pinger #1]
10190:20190826:153834.147 server #33 started [preprocessing worker #3]
10189:20190826:153834.148 server #32 started [preprocessing worker #2]
10188:20190826:153834.163 server #31 started [preprocessing worker #1]
setup işlemleri bittikten sonra “http://zabbix-server-IP-adresi/zabbix/setup.php” adresinden GUI konfiglerini tamamlayalım.
GUI konfigürasyonu sonrası sunucu tarafındaki monitorlerimizi ekleyebiliriz :

 

ahmetay@gmail.com

FreeIPA ile windows / ubuntu hesap yönetimi

Hedef : tamamen opensource kaynaklar kullanarak client ve user tanımlarını merkezi olarak yönetmek. Peki Microsoft Active Directory var, sen neden bahsediyorsun diyen arkadaşlara OS ve Core CAL lisanslarının selamı var 🙂

 

Kullanılan işletim sistemleri :

IPA server : CentOS

Test Client1 : Ubuntu

Test Client2 : Windows 2012

 

Vazgeçilenler :

MS Active Directory’nin sağladığı konfor alanı ve alışkanlıklar.

Kazançlar :

Tamamen duygusal 🙂

 

IPA server kurulumu :

setup öncesi ipa server’ın çalışacağı sunucunun hostname tanımı düzenliyoruz ve yum ile ipa server’ın kurulumunu tamamlıyoruz.

[root@ipa01 ~]# hostnamectl set-hostname ipa01.kanux.local,

[root@ipa01 ~]# hostname
ipa01.kanux.local

…..

[root@ipa01 ~]# yum install ipa-server

…..

[root@ipa01 ~]# rpm -qa|grep ipa-server
ipa-server-4.5.4-10.el7.centos.4.4.x86_64

setup tamamlandığında artık IPA server tanımlarını yapabiliriz.

[root@ipa01 ~]# ipa-server-install

realm ve management password tanımlarını sırasıyla istenen adımlarda belirliyoruz.

IPA server kurulumu tamamlandığında web ui üzerinden user ve host yönetimini yapabiliriz.

https://ipa01.kanux.local/ipa/ui/#/e/user/search

 

Ubuntu client setup :

ipa-client-install –hostname=`ClientIPAddress -f` \
–mkhomedir \
–server=ipa01.kanux.local \
–domain kanux.local \
–realm kanux.local

 

Windows client setup:

1.adım :

[root@ipa01 ~]# ipa-getkeytab -s ipa01.kanux.local -p host/testwin.kanux.local -e arcfour-hmac -k krb5.keytab.windows -P

2.adım :

ksetup /setdomain KANUX.LOOCAL
ksetup /addkdc KANUX.LOOCAL ipa01.kanux.local
ksetup /addkpasswd KANUX.LOOCAL ipa01.kanux.local
ksetup /setcomputerpassword “password”
ksetup /mapuser * *

ahmetay@gmail.com

dotnet core on docker container

Merhaba, bu yazımda sizlere bir dotnet core projesinin docker container üzerinde çalıştırılmasını anlatacağım. Tüm işlemler basic setup CentOS 7 ve docker 18.04.0-ce üzerinde yapılmıştır.

Basitçe hazırlanmış bir dotnet core projesini ; önce microsoft/aspnetcore imajını kullanarak bir container oluşturup daha sonra bu container’ı kullanarak projemizi aynı host üzerinde çalıştıracağız.

[root@lynx-test v1]# docker pull microsoft/aspnetcore
………
[root@lynx-test v1]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
microsoft/aspnetcore-build latest a183b62f414b 21 hours ago 1.97GB
microsoft/dotnet latest 2e537f28e47b 3 days ago 1.75GB
microsoft/aspnetcore-build 2.0 b397a6198a04 5 days ago 1.97GB
microsoft/aspnetcore 2.0 6accbd9bed02 5 days ago 325MB
microsoft/aspnetcore latest 6accbd9bed02 5 days ago 325MB

Artık projemizi çalıştırabileceğimiz bir docker imajına sahip olduğumuzu görüyoruz. bundan sonra dotnet core imajını kullanacak kendi projemize ait container oluşturabiliriz. Burada daha önceden derlenmiş olan kodlarımızı kullanacağımızdan ve  oluşturulan container sadece bu yazıya özel olduğundan siz kendi container’ınızı projenizin derlenmemiş hali ile de oluşturup kullanabilirsiniz.

örn.:

FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY –from=build-env /app/out .
ENTRYPOINT [“dotnet”, “aspnetapp.dll”]

biz yazımıza yukarıda bahsettiğim, derlenmiş kod üzerinden devam ediyoruz.

derlenmiş kodlarımızın bulunduğu folder altına “Dockerfile” oluşturuyoruz;

# build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY . ./
ENTRYPOINT [“dotnet”, “CoreServices.Chat.Api.dll”]
Sending build context to Docker daemon 2.048kB
Step 1/4 : FROM microsoft/aspnetcore:2.0
—> 6accbd9bed02
Step 2/4 : WORKDIR /app
—> Using cache
—> 6b920348796e
Step 3/4 : COPY . ./
—> 6d14ee68e14d
Step 4/4 : ENTRYPOINT [“dotnet”, “CoreServices.Chat.Api.dll”]
—> Running in ff20a4ee7a40
Removing intermediate container ff20a4ee7a40
—> 4b6aee92dc23
Successfully built 4b6aee92dc23
Successfully tagged v1:latest
Dockerfile’ımızı kullanarak çalışacan cotainer’ı build ediyoruz.
[root@lynx-test v1]# docker build -t donet_core_test .

 

[root@lynx-test v1]# docker images -a
REPOSITORY TAG IMAGE ID CREATED SIZE
v1 latest 4b6aee92dc23 5 minutes ago 325MB
microsoft/aspnetcore-build latest a183b62f414b 22 hours ago 1.97GB
microsoft/dotnet latest 2e537f28e47b 3 days ago 1.75GB
microsoft/aspnetcore-build 2.0 b397a6198a04 5 days ago 1.97GB
microsoft/aspnetcore 2.0 6accbd9bed02 5 days ago 325MB
microsoft/aspnetcore latest 6accbd9bed02 5 days ago 325MB

son adım olarak, container’ımızı kullanarak dotnet core uygulamamızı çalıştırıyoruz :

docker run -it –rm -p 80:4000 –name docker-app-name v1 (conainer name)
[root@lynx-test v1]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 906/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1341/master
tcp6 0 0 :::80 :::* LISTEN 11492/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 906/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1341/master
artık tarayıcımıza docker servisinin çalıştığı IP adresini yazdığımızda (80 portundan) dotnet core uygulamıza erişebileceğiz.

 

ahmetay@gmail.com

Web API management (Kong)

Web API’larını yönetmek her zaman sorun olmuştur. Bu konuda MS Azure, AWS, CA benzeri yetenekleri oldukça gelişmiş API Management servisleri bulunmakta fakat bu araçları kullanmak için belirli bir ücret ödemeniz sözkonusu. Web API’larınızı ücretsiz olarak yönetebileceğiniz kong, tyk vb. araçlar alternatif çözüm olarak kullanılabilir.
Bu yazımda sizlere kong ile Web API yönetimini anlatacağım.
* OS olarak CentOS 7.3 kullanılmıştır.
** DB Server PostgreSQL 9.6 kullanılmıştır.
https://getkong.org/install/centos/ adresinden kong repository download edilebilir.
[root@localhost ~]# yum install epel-release
[root@localhost ~]# yum install kong
*kong DB olarak cassandra ve PostgreSQL 9.4+ desteklemektedir.
kong için DB oluşturmamız gerekiyor;
CREATE USER kong; CREATE DATABASE kong OWNER kong;
DB oluşturduktan sonra erişim bilgilerini kong.conf içine yazıyoruz.
############### PGSQL config start #################
database = postgres
pg_host = xxx.xxx.xxx.xxx
pg_port = 5432

pg_user = yyyy

pg_password = zzzzz

pg_database = kong

############### PGSQL config end #################
artık uygulamayı çalıştırabiliriz.
[root@localhost ~]# kong start
# Kong is running
erişim için curl http://kong-ip-address:8001
kong setup bittikten sonra Web API’larınızı web üzerinden yönetmek için kong-dashboard kullanabilirsiniz.
kong-dashboard setup için ; https://github.com/PGBI/kong-dashboard
gereksinimler : nodejs & npm
[root@localhost ~]# npm install -g kong-dashboard
[root@localhost ~]# kong-dashboard start
web tarayıcınızdan http://kong-ip-address:8080/#/config

dashboard

Artık API’ınız kong ile yönetmeye hazırsınız, APIs sekmesinden API ekliyoruz.
kong üzerinden artık eklediğiniz API’ınız çağırabilirsiniz. http://kong-ipaddress:port/api/path
Kong üzerinden yönetmeye başladığınız API’ınız için kod değişikliği yapmadan örneğin basic authenticaion ekleyebilirsiniz.
Consumer sekmesinden test için bir kayıt ekliyoruz ve plugin sekmesinden basic authentication plugin’i aktif ediyoruz.
http://kong-ipaddress:port/api/path adresinden çağırdığınız API için artık user/password ile erişmeniz gerekecek. consumer altına eklediğiniz user/password ile erişim yapabilirsiniz.

basic-auth2

ahmetay@gmail.com

IIS logs import elasticsearch and view kibana (with logstash)

Merhaba, bu yazımda IIS server loglarının logstash ile elasticsearch üzerine aktarımını anlatacağım.
Anlatılan bu setup; Windows server 2012 R2, CentOS 7.2 işletim sistemleri üzerinde yapılmıştır.
Elasticsearch version : 2.4.0
Kibana version : 4.6.0
Logstash version : 2.4.0
IIS sunucu üzerinde log tanımını yapıyoruz.
https://www.elastic.co/downloads/logstash adresinden logstash (ZIP version) download yapıyoruz.
Download edilen dosyayı “C:\Program Files\logstash” altına açıyoruz.

 

conf

input {
 file {
 #type => "iis"
 path => "%IIS log files path%/*.log"
 start_position => "beginning" 
 }
}

filter {
 
 #ignore log comments
 if [message] =~ "^#" {
 drop {}
 }


 grok {
 # check that fields match your IIS log settings
 match => ["message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:site}
 %{WORD:method} %{URIPATH:page} %{NOTSPACE:querystring} %{NUMBER:port}
 %{NOTSPACE:username} %{IPORHOST:clienthost} %{NOTSPACE:useragent}
 %{NUMBER:response} %{NUMBER:subresponse} %{NUMBER:scstatus}
 %{NUMBER:time_taken}"]
 }
 
 #Set the Event Timesteamp from the log
 date {
 match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]
 timezone => "Etc/UTC"
 } 
 
 
 useragent {
 source=> "useragent"
 prefix=> "browser"
 }
 
 mutate {
 remove_field => [ "log_timestamp"]
 }
}

output {
stdout {}
elasticsearch {
hosts => ["elastisearch_server_IP:9200"]
}
stdout { codec => rubydebug }
}

 

NSSM (non-sucking service manager) ile windows servis olarak logstash’i ekliyoruz.
https://nssm.cc/

 

logstash servisini çalıştırdıktan sonra artık kibana tarafına geçebiliriz.
elasticsearch kurulumu için yazımı okuyabilirsiniz
Kibana için adresinden güncel versiyonu download ediyoruz, kibana yükleme işleminden sonra /opt/kibana/conf/kibana.yml içindeki elasticsearch için gerekli olan düzenlemeyi resimdeki gibi yapıyoruz.
kibana için http://kibanaserverIP:5601/app/kibana adresinden erişim yapabilirsiniz.

 

kibana3

 

ahmetay@gmail.com

 

Redis monitoring (redis-stat)

Merhaba, daha önce sizlere redis kurulumunu anlattığım yazımdan sonra çalışan redis sunucunuzu monitor etmek için
basit, işlevsel ve ücretsiz bir monitoring aracı olan redis-stat kurulumunu CentOS 7 üzerinde anlatmak istiyorum.
redis-stat kurulumuna geçmeden önce ihtiyacımız olan ön hazırlık paketlerini yüklüyoruz

yum install ruby-devel.x86_64 gcc-c++.x86_64 -y

3

paketlerin yüklemesi tamamlandıktan sonra redis-stat kurulumuna geçebiliriz.
gem install redis-stat

2.PNG

artık redis-stat monitorunu çalıştıralım.
redis-stat REDIS-SERVER-IP:6379 –verbose –server=8080 –daemon 5
verilen parametreleri ihtiyacınıza göre değiştirebilirsiniz.

1

 

ahmetay@gmail.com

PowerShell grep & count

Merhaba, powershell ile dosya(lar) içindeki her hangi bir kelime ya da cümleyi arama ve count almak için aşağıdaki yöntemi deneyebilirsiniz.

PS-1

sls “search keyword” -Path *.log -ca komutuyla klasör içindeki *.log uzantılı tüm dosyalarda istediğiniz kelime için search yapabilirsiniz.
(Select-String -Path *.log -Pattern “search keyword”).count komutuyla aradığınız kelimenin kaç kez geçtiği bilgisini alabilirsiniz.

PS-2

 

ahmetay@gmail.com

Redis kurulum (v 3.0.6)

Merhaba, bu yazımda size CentOS 7 üzerinde stand alone Redis server (v 3.0.6) kurulumunu anlatacağım.
Redis server kurulumuna başlamadan önce ruby, rubygems-devel ve gcc paketlerini yüklüyoruz. Bu işlem tamamlandıktan sonra “gem install redis” komutunu çalıştırıyoruz.

rsetup3.PNG

artık Redis server kurulumuna başlayabiliriz. Güncel stabil versiyonu http://redis.io/download adresinden indirebilirsiniz.

rsetup1.PNG

indirdiğiniz tar paketini /usr/share/ altına açıyoruz. (/usr/share/redis-3.0.6/)

rsetup2

“make” komutuyla redis server kurulumunu tamamlıyoruz.

rsetup4.PNG

artık redis serverı çalıştırabiliriz. “src/redis-server redis.conf”

rsetup5.PNG

redi serverı test için:  src/redis-cli -h “redis server IP” komutuyla redis servisine bağlanıyoruz. Artık redis servisimize key atabilir ve daha sonra atadığımız key üzerinden değer okuyabiliriz.

rsetup6.PNG

 

*CLI ekranını sevmiyorsanız windows üzerinden “redis desktop manager” ile redis sunucularınıza bağlanabilirsiniz.
ahmetay@gmail.com

Elasticsearch kurulumu (v 1.7.4)

Merhaba, sizlere bu yazımda Elasticsearch (v 1.7.4) kurulumunu basitçe anlatmaya çalışacağım. Kurulum CentOS 7 ile yapılmıştır.
Öncelikle elasticsearch java üzerinde çalışan bir uygulama olduğundan kuruluma JVM ile başlıyoruz.

setup2

java kurulumu tamamlandıktan sonra https://www.elastic.co adresinden ES 1.7.4 rpm paketini download ederek devam ediyoruz.

setup1

rpm paketini indirdikten sonra rpm -i ile ES kurumuna devam edebiliriz.

setup3.PNG

kurulum sonrası OS seviyesinde çalıştırılması istenen komutları sırasıyla çalıştırıyoruz. Burada dikkat edilmesi gereken “systemctl start elasticsearch” komutundan önce ES’nin hangi NIC üzerinden çalışacağını belirlemekte fayda var. (örn.: /etc/elasticsearch/elasticsearch.yml konfigürasyon dosyasından http.bind.host “1.1.1.1” olarak düzenlenebilir)
ES’nin çalışacağı NIC belirlendikten sonra artık servisimizi çalıştırabiliriz.

setup4.PNG

ES standart konfigürasyonu değiştirilmedikçe, servisini start edildikten sonra  /var/log/elasticsearch altına kendi loglarını yazmaya başlar.
ES servisine bir istek yapmadan önce son bir kontrol için doğru ES’nin çalıştığı portları kontrol ediyoruz.

setup5.PNG

/etc/elasticsearch/elasticsearch.yml içinde yaptığımız NIC tanımlarını doğruladıktan sonra,artık ES sunucumuza istek yapabiliriz.

setup6.PNG

Kurulum tamamlandıktan sonra artık sisteme yeni bir node ekleyip cluster node sayınızı arttırmak için yeni hazırladığınız ES sunucusunda /etc/elasticsearch/elasticsearch.yml içinde discovery.zen.ping.unicast.hosts: “mevcut ES sunucu IP adresi” yazmanız yeterli olacaktır.

 

Faydalı olacağını düşündüğüm plugin’ler :
  • Cluster monitoring için ES-HQ
  • ES node monitoring için : ES – bigdesk
  • Chrome addon ile ES sunucunuza query yazmak için : ES Sense (beta)
ahmetay@gmail.com