Dohledový systém Zabbix II. - instalace
Po teoretickém úvodu z minulého dílu se pojďme podívat na praktickou část další části seriálu o dohledovém systému Zabbix. V dnešním díle postupnými kroky dojdeme k zprovoznění dohledového systému a ti nedočkaví mohou začít bez zábran experimentovat a pronikat do tajů všeho, co Zabbix nabízí.
26.2.2013 00:00 |
Antonín Kolísek
| Články autora
| přečteno 22821×
Než začneme
Před samotnou instalací dohledového systému je nutné zvážit několik hledisek. Nejprve si musíme zodpovědět několik základních otázek. Kolik, co a jak dlouho. Tedy první hledisko je přibližný odhad toho, kolik zařízení budeme sledovat a k tomu odpovídající počet testů na každé zařízení. Dále je nutné mít představu, jak dlouhou historii naměřených dat chceme uchovat. Zmiňované informace mají primární vliv na velikost požadovaných systémových prostředků. Jde především o velikost databáze společně s počtem sledovaných zařízení (čím víc zařízení, tím větší zatížení databáze), která určuje požadovaný fyzický výkon serveru. Na jednoduchém příkladu si nyní ukážeme, jakým způsobem lze alespoň přibližně vypočítat požadavky na velikost databáze a jak si počínat s výběrem hardwaru.
Velikost databáze
Pro odhad požadovaného diskového prostoru musíme znát veškeré informace o konkrétním hostu, počet hostů, počet testů a délku historie. Pokud budeme uvažovat 1000 zařízení u každého budeme sbírat 5 hodnot data budeme sbírat každých 60 vteřin a historii chceme uchovat 30 dnů, výpočet bude následující.
- historie monitorovaných hodnot
položky x hosté = počet hodnot
5 x 1000 = 5000 hodnot
5000 / 60 = 83 hodnot za vteřinu
dny x (položky / čas) x 24 x 3600 x bytů = objem dat
1 x (5000 / 60) x 24 x 3600 x 50 = 360 MB za den
(30 * 360) = 10.8 GB za 30 dnů
- historie trendů (Trends)
dny x (položky / 3600) x 24 x 3600 x bytů = objem dat
30 x (5000 / 3600) x 24 x 3600 x 128 = 460 MB za 30 dnů
- historie událostí (Events)
dny x události x 24 x 3600 x bytů = objem dat
30 x 1 x 24 x 3600 x 130 = = 336960000 = 337 MB za 30 dnů
Nyní již můžeme vypočítat přibližnou hodnotu potřebného diskového prostoru za 30 dnů součtem Konfigurace + Historie + Trendy + Události to je 10 MB + 1080 MB + 460 MB + 337 MB = 1887 MB. Výpočet je pouze orientační. Musíme brát v úvahu, že v reálném nasazení není u všech hostů stejný počet sledovaných parametrů (tesů) a stejně i délka historie / trendů / událostí může být různá. Pro výpočet je nutné uvažovat vždy mezní hodnoty.
Typ databáze
Výběr databáze závisí na mnoha faktorech. Z praktického hlediska záleží na robustnosti celého řešení, což závisí na velikosti a počtu sledovaných zařízení. Dále také na vlastních zkušenostech s konkrétním typem databáze. Nejpoužívanější databází pro Zabbix je dle zkušeností MySQL. Na tuto databázi se proto zaměříme i v našem seriálu. Pro velmi velké zatížení lze použít i databázi PostrgeSQL V případě výběru jiné databáze je možné vybírat z následujících:
- IBM DB2 (u verze Zabbix 2.0 zatím jako experimentální)
- MySQL
- Oracle
- PostgreSQL
- SQLite (SQLite3 u Zabbix 2.0 zatím exmerimentální)
Hardware
Návrh hardwaru pro Zabbix je velmi závislý na velikosti monitorované infrastruktury, tj. na počtu zařízení. Jiné požadavky budou po sledování řádově desítek až stovek zařízení a jiné požadavky pro tisíce a více hostů. Následující tabulka znázorňuje alespoň základní doporučení.
Při větším počtu hostů dochází k většímu zatížení databáze. V takovém případě je vhodné použít pro datové úložiště velmi rychlé disky, např. s rozhraním RAID10. V případě velkého zatížení databáze a velmi velkého počtu sledovaných zařízení (řádově tisíce) je vhodné rozložit provoz na nezávislé servery a oddělit fyzicky databázi, Zabbix server a webový server. V reálném nasazení, kdy je potřeba sledovat rozsáhlou infrastrukturu, je vhodné a často přímo nutné přikročit k distribuovanému monitoringu a využít režimu proxy nebo nodů.
Příprava systému
K provozování Zabbixu je nutné připravit operační systém tak, aby obsahoval potřebné programové vybavení. V našem případě se zaměřím na použití distribuce CentOS. Všechny kroky jsou platné pro RHEL GNU/Linux (Red Hat Enterprise Linux) který je v komerční sféře zřejmě nejvíce zastoupený. U jiných distrubucí by se postupovalo obdobnými kroky, jen by bylo použito jiného správce balíčků a jiných repozitářů pro instalaci programů. Názvy požadovaných aplikací jsou obdobné většinou ve všech distribucích GNU/Linux, proto nebude obtížné zužitkovat následující informace v jakékoli jiné distribuci. Odpovídající verze požadovaných aplikací je vhodné vždy kontrolovat s aktuálními požadavky viz dokumentace. Nebudu zde proto uvádět čísla verzí, ale jen názvy požadovaných aplikací viz následující výčet.
- Apache - httpd
- MySQL - mysql-server, mysql-libs, (myslq-devel)
- PHP - php, php-bcmath, php-gd, php-mysql, php-mbstring
- Gettext - gettext, gettext-devel, gettext-libs
- Gd - gd
- XMLlib - libxml2
Výše uvedené balíčky jsou nutné pro úspěšné provozování dohledového systému Zabbix. Dále následuje seznam doporučených aplikací, které nejsou pro základní provoz nezbytně vyžadované. Pokud chceme, aby Zabbix nabízel i pokročilejší metody monitoringu (SNMP, IPMI, SSH,Web monitoring ...), bude nutné zajistit přítomnost také následujících balíčků:
- OpenIPMI - (OpenIPMI-devel), OpenIPMI-libs
- libssh2 - libssh2, (libssh2-devel)
- libcurl - curl, libcurl, (libcurl-devel)
- net-snmp - net-snmp, (net-snmp-devel), net-snmp-libs, net-snmp-utils
Veškeré *-devel balíčky nainstalujeme jen v případě, že budeme Zabbix kompilovat ze zdrojových souborů, s čímž v našem případě počítáme. Ukážeme si zde všechny způsoby instalace. Instalaci / aktualizaci požadovaných součástí provedeme podle následujících kroků. Je možné, že pro splnění závislostí bude nutné instalovat i jiné balíčky, o což se postará nástroj pro správu balíčků.
shell> yum install httpd php gd php-bcmath php-mbstring php-gd php-mysql mysql mysql-libs mysql-server libssh2 libcurl net-snmp-* ntpdate curl curl-libs gettext gettext-libs libxml2 OpenIPMI-libs libssh2
V případě, že budeme kompilovat Zabbix ze zdrojových kódů, nainstalujeme potřebné devel balíčky a kompilační nástroje. Z hlediska bezpečnosti je někdy nežádoucí, aby produkční server obsahoval kompilační nástroje. V takovém případě je možné, s ohledem na bezpečnost a máme-li tuto možnost, sestavit balíček na jiném serveru. Případně můžeme použít již připravené balíčky z externích repozitářu. Pro náš případ, kdy chci názorně popsat i manuální sestavení a instalaci Zabbixu, můžeme zmíněné "malé" bezpečnostní riziko akceptovat. Kompilátor jazyka C, nástroje pro kompilaci a devel balíčky nainstalujeme následovně.
shell> yum install mysql-devel zlib-devel glibc-devel curl-devel net-snmp-devel gnutls-dev libssh2-devel gcc automake make libidn-devel openssl-devel OpenIPMI-devel
Pokud chceme, aby byl Zabbix s podporou notifikace pomocí služby Jabber, bude nutné naistalaovat balíky iksemel iksemel-devel, které je nutné instalovat z EPEL repozitáře.
fping
Zabbix využívá rozšířenou verzi programu ping. Program fping nemusí být obsažen v některých distribucích. Stejně jak to je i v našem případě při použití CentOS. Je nutné proto aplikaci nainstalovat do systému ručně, případně použít externí repozitář EPEL. Pro manuální instalaci balíčku budeme postupovat následovně.
shell> rpm -Uvh ftp://ftp.univie.ac.at/systems/linux/dag/redhat/el6/en/x86_64/dag/RPMS/fping-3.4-1.el6.rf.x86_64.rpm
Po instalaci nastavíme oprávnění. V tomto kroku je nutné založit i uživatele a skupinu.
shell> chmod 4710 /usr/sbin/fping
shell> groupadd zabbix
shell> useradd -g zabbix zabbix
shell> chgrp zabbix /usr/sbin/fping
Přesný čas
Sledovaná data by byla k ničemu, kdyby neodpovídala skutečnosti. Je proto nutné zajistit přesný čas na serveru, na kterém provozujeme Zabbix. O čas se stará démon ntpd, kterého je proto nutné natsavit. Je možné použít alternativní způsob nástrojem ntp-date a přidat do plánovače úloh cron následující řádek:
00 12 * * * /sbin/ntpdate tik.cesnet.cz > /dev/null
Bezpečnost především
Zabbix potřebuje pro svoji činost otevřené porty 10051, dále pak port 80 pro webové rozhraní. Dále je v některých případech nutné upravit nastavení SELinux pokud jej konkrétní distribuce používá nebo úplně v krajním případě deaktivovat.
- v případě použití standartních portů upravíme /etc/services
shell> echo "zabbix_agent 10050/tcp" >> /etc/services
shell> echo "zabbix_server 10051/tcp" >> /etc/services
- upravíme pravidla pro firewall
shell> iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
shell> iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 10051 -j ACCEPT
shell> service iptables save
- SELinux přepneme do tolerantního řežimu nebo jej deaktivujeme úpravou souboru /etc/sysconfig/selinux změnou nastavení SELINUX=permissive, povolíme přístup k portu 10051 a nstavíme pravidla pro fping. Pokud systém neobsahuje nástroj semanage) je nutné jej doinstalovat.
shell> yum install policycoreutils-python
shell> semanage port -a -t http_port_t -p tcp 10051
- vytvoříme soubor zabbix_fping z následujícím obsahem
module zabbix_fping 1.0;
require {
type initrc_tmp_t;
type ping_t;
class file read;
}
allow ping_t initrc_tmp_t:file read;
sestavíme a nainstalujeme modul
shell> checkmodule -M -m -o zabbix_fping.mod zabbix_fping
shell> semodule_package -o zabbix_fping.pp -m zabbix_fping.mod
shell> semodule -i zabbix_fping.pp
Instalace
Možností jak nainstalovat Zabbix je několik. V případě použití balíčku se nemusíme starat o instalaci dalších programů pro splnění závislosti a o základní nastavení systému. Další výhodou je automatická aktualizace a úprava konfiguračních souborů. Administrátor se tak nemusí téměř o nic starat. My si ukážeme také možnost sestavit Zabbix ze zdrojových kódů, což je vhodné například v případě, kdy repozitáře nenabízí konkrétní verzi a nebo dohledový systém nenabízí vůbec. Nicméně i zde se budeme držet předpokladu, že používáme CentOS/RHEL.
Použití repozitářů
Nejednodušší možností je použít již sestavených balíčku pro danou architekturu (i386 / x86_64) a odpovídající verzi distribuce. V takovém případě máme dvě možnosti. Můžeme použít repozitáře EPEL nebo ZabbixZone. V žádném případě nekombinujeme oba repozitáře. V případě, že potřebujeme mít v systéme nastavené oba dva, je nutné použít priorit případně Zabbix v EPEL repozitáři zakázat.
EPEL (Extra Packages for Enterprise Linux)
- přidáme externí repozitář do systému
shell> rpm -Uvh http://mirror.karneval.cz/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
- nainstalujeme odpovídající balíčky
shell> yum install zabbix20 zabbix20-agent zabbix20-server zabbix20-server-mysql zabbix20-web zabbix20-web-mysql
ZabbixZone
- přidáme externí repozitář do systému
shell> rpm --import http://repo.zabbixzone.com/centos/RPM-GPG-KEY-zabbixzone
shell> rpm -Uv http://repo.zabbixzone.com/centos/zabbixzone-release-0.0-1.noarch.rpm
- nainstalujeme odpovídající balíčky
shell> yum install zabbix zabbix-agent zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql
Manuální instalace
Manuální instalace není příliš žádoucí v případě distribuce založené na balíčcích. Někdy to je ale jediná možnost, jak konkrétní nástroj provozovat. Je možné také RPM balíček vytvořit ručně, tím se tento seriál nebude zabývat, protože by byl překročen rámec seriálu. Pro lepší orientaci a administraci dohledového systému Zabbix uvádím možnost ruční instalace. Celý proces se skládá z několika kroků.
Příprava
- nejprve stáhneme zdrojový soubor ze stránek www.zabbix.com
shell> cd /tmp
shell> wget http://downloads.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.0.4/zabbix-2.0.4.tar.gz
- rozbalíme archív
shell> tar -xzf zabbix-2.0.4.tar.gz
Sestavení a instalace
- provedeme konfiguraci s podporou MySQL, SSH2, OpenIPMI, SNMP, IPv6, CURL
shell> cd /tmp/zabbix-2.0.4
shell> ./configure --sysconfdir=/etc/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-openipmi --with-ssh2
- sestavíme a nainstalujeme
shell> make
shell> make install
- pokud jsme ještě nezaložili skupinu a oprávnění je na to správná doba
shell> groupadd zabbix
shell> useradd -g zabbix zabbix
shell> mkdir /etc/zabbix /etc/zabbix/externalscripts
shell> chown -R zabbix /etc/zabbix
shell> chgrp zabbix /usr/sbin/fping
Nastavení
- nastavíme automatický start služeb
shell> cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
shell> cp misc/init.d/fedora/core/zabbix_server /etc/init.d/
- upravíme v /etc/init.d/zabbix_server a /etc/init.d/zabbix_agentd následující řádky
BASEDIR=/usr/local
FULLPATH=$BASEDIR/sbin/$BINARY_NAME
- nastavíme runlevel požadovaných služeb
shell> chkconfig --add zabbix_server
shell> chkconfig --add zabbix_agentd
shell> chkconfig --level 345 zabbix_server on
shell> chkconfig --level 345 zabbix_agentd on
shell> chkconfig --level 345 httpd on
shell> chkconfig --level 345 mysqld on
Založení databáze
Založení databáze je stejné pro všechny metody instalace. Databázi je nutné nastavit ručně i v případě použití instalačních balíčku. Předpokládejme, že máme databázi (v našem případě MySQL) funkční a známe uživatele root. V případě, že se jedná o čistou instalaci, je nutné nejprve při prvním spuštění MySQL založit uživatele root.
shell> /usr/bin/mysqladmin -u root password 'new-password'
shell> service mysqld start
V případě běžící MySQL databáze pokračujeme v tvorbě databáze pro Zabbix.
shell> mysql -u<username> -p<password>
mysql> CREATE database zabbix character set utf8;
mysql> GRANT DROP,INDEX,CREATE,SELECT,INSERT,UPDATE,ALTER,DELETE ON zabbix.* TO zabbix@localhost IDENTIFIED BY "password";
mysql> quit;
shell> mysql -u zabbix -p <password> zabbix < database/mysql/schema.sql
shell> mysql -u zabbix -p <password> zabbix < database/mysql/images.sql
shell> mysql -u zabbix -p <password> zabbix < database/mysql/data.sql
Nastavení webserveru
V případě použití balíčku dojde k nastavení webového serveru (Apache) automaticky. Je důležité dát jen pozor na umístění webového frontendu, který se nachází v /usr/share/zabbix. Pokud instalujeme Zabbix ručně, umístíme frontend dle vlastního nastavení webserveru. Pokud se jedná o čistou instalaci a webový server není ještě nastavený, konfigurace může být následující.
shell> cp -r frontends/php /var/www/html/zabbix
shell> chown -R apache:apache /var/www/html/zabbix/conf
Vytvoříme /etc/httpd/conf.d/zabbix.conf s následujícím obsahem:
Alias /zabbix /var/www/html/zabbix
<Directory "/var/www/html/zabbix">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
php_value max_execution_time 600
php_value memory_limit 256M
php_value post_max_size 64M
php_value upload_max_filesize 10M
php_value max_input_time 600
php_value date.timezone Europe/Prague
php_value mbstring.func_overload 7
</Directory>
<Directory "/var/www/html/zabbix/conf">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/var/www/html/zabbix/api">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/var/www/html/zabbix/include">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
<Directory "/var/www/html/zabbix/include/classes">
Order deny,allow
Deny from all
<files *.php>
Order deny,allow
Deny from all
</files>
</Directory>
Především hodnoty pro nastavení PHP (php_value) jsou nutné pro úspěšný provoz Zabbixu. Nyní můžeme restartovat webový server a pokračovat v instalaci.
shell> services httpd restart
Konfigurace Zabbix serveru a agenta
Editujeme konfigurační soubory zabbix_server.conf a zabbix_agentd.conf. My jsme zvolili umístění konfiguračních souboru při sestavování zdrojových kódů volbou --sysconfdir=/etc/zabbix. Při instalaci z balíčků nebo ponecháním výchozí cesty nalezneme konfigurační soubory v /usr/local/etc/zabbix.
- v souboru zabbix_agentd.conf upravíme tyto řádky
Server=127.0.0.1
DebugLevel=2
- v souboru zabbix_server.conf toho bude trošku víc
ExternalScripts=/etc/zabbix/externalscripts
DebugLevel=2
FpingLocation=/usr/sbin/fping
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=password
DBSocket=/var/lib/mysql/mysql.sock
- spustíme oba procesy a zjistíme, jestli běží. V záporném případě je nutné obrátit pozornost na chyby zapsané v souborech /tmp/zabbix_agentd.log a /tmp/zabbix_server.log
shell> service zabbix_server start && service zabbix_agentd start
shell> ps -A | grep zabbix
Instalace webového rozhraní
Posledním krokem instalačního procesu je instalace webového rozhraní. Všechny kroky probíhají přes libovolný webový prohlížeč. Celý proces je velmi jednoduchý viz následující obrazovky.
- kontrola požadovaných součástí a nastavení PHP
- nastavení a kontrola přístupu k databázi
- nastavení portu a ip adresy/jména Zabbix serveru
- po rekapitulaci nastavení úspěšně dokončíme instalaci
- nyní se můžeme po úspešné instalaci přihlásit do dohledového systému. Výchozí účet administrátora je uživatel=admin heslo=zabbix.
Rekapitulace
V dnešní části seriálu jsme se úspěšně dostali do stavu, kdy můžeme začít experimentovat s dohledovým systémem Zabbix. Veškeré nastavení je pouze základní. Pro reálné nasazení je nutné často velmi zdlouhavého ručního ladění parametrů a to jak databáze, tak serverového procesu. V příštím díle se podíváme na základní popis prostředí, aby bylo možné pomalými kroky pronikat do tajů monitoringu.
Odkazy
1. Zabbix domovské stránky : http://www.zabbix.com
2. Zabbix dokumentace : http://www.zabbix.com/documentation.php
3. Zabbix - Požadavky : https://www.zabbix.com/documentation/2.0/manual/installation/requirements
4. Zabbix - Instalace : https://www.zabbix.com/documentation/2.0/manual/installation/install
5. EPEL : http://fedoraproject.org/wiki/EPEL
6. ZabbixZone : http://repo.zabbixzone.com
Verze pro tisk
|
Příspívat do diskuze mohou pouze registrovaní uživatelé.
|
|

Vyhledávání software

Vyhledávání článků
28.11.2018 23:56 /František Kučera Prosincový sraz spolku OpenAlt se koná ve středu 5.12.2018 od 16:00 na adrese Zikova 1903/4, Praha 6. Tentokrát navštívíme organizaci CESNET. Na programu jsou dvě přednášky: Distribuované úložiště Ceph (Michal Strnad) a Plně šifrovaný disk na moderním systému (Ondřej Caletka). Následně se přesuneme do některé z nedalekých restaurací, kde budeme pokračovat v diskusi.
Komentářů: 1
12.11.2018 21:28 /Redakce Linuxsoft.cz 22. listopadu 2018 se koná v Praze na Karlově náměstí již pátý ročník konference s tématem Datová centra pro business, která nabídne odpovědi na aktuální a často řešené otázky: Jaké jsou aktuální trendy v oblasti datových center a jak je optimálně využít pro vlastní prospěch? Jak si zajistit odpovídající služby datových center? Podle jakých kritérií vybírat dodavatele služeb? Jak volit vhodné součásti infrastruktury při budování či rozšiřování vlastního datového centra? Jak efektivně datové centrum spravovat? Jak co nejlépe eliminovat možná rizika? apod. Příznivci LinuxSoftu mohou při registraci uplatnit kód LIN350, který jim přinese zvýhodněné vstupné s 50% slevou.
Přidat komentář
6.11.2018 2:04 /František Kučera Říjnový pražský sraz spolku OpenAlt se koná v listopadu – již tento čtvrtek – 8. 11. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma umění a technologie, IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
4.10.2018 21:30 /Ondřej Čečák LinuxDays 2018 již tento víkend, registrace je otevřená.
Přidat komentář
18.9.2018 23:30 /František Kučera Zářijový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 20. 9. 2018 od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Tentokrát bez oficiální přednášky, ale zato s dobrým jídlem a pivem – volná diskuse na téma IoT, CNC, svobodný software, hardware a další hračky.
Přidat komentář
9.9.2018 14:15 /Redakce Linuxsoft.cz 20.9.2018 proběhne v pražském Kongresovém centru Vavruška konference Mobilní řešení pro business.
Návštěvníci si vyslechnou mimo jiné přednášky na témata: Nejdůležitější aktuální trendy v oblasti mobilních technologií, správa a zabezpečení mobilních zařízení ve firmách, jak mobilně přistupovat k informačnímu systému firmy, kdy se vyplatí používat odolná mobilní zařízení nebo jak zabezpečit mobilní komunikaci.
Přidat komentář
12.8.2018 16:58 /František Kučera Srpnový pražský sraz spolku OpenAlt se koná ve čtvrtek – 16. 8. 2018 od 19:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát jsou tématem srazu databáze prezentaci svého projektu si pro nás připravil Standa Dzik. Dále bude prostor, abychom probrali nápady na využití IoT a sítě The Things Network, případně další témata.
Přidat komentář
16.7.2018 1:05 /František Kučera Červencový pražský sraz spolku OpenAlt se koná již tento čtvrtek – 19. 7. 2018 od 18:00 v Kavárně Ideál (Sázavská 30, Praha), kde máme rezervovaný salonek. Tentokrát bude přednáška na téma: automatizační nástroj Ansible, kterou si připravil Martin Vicián.
Přidat komentář
Více ...
Přidat zprávičku
 Poslední diskuze
31.7.2023 14:13 /
Linda Graham iPhone Services
30.11.2022 9:32 /
Kyle McDermott Hosting download unavailable
13.12.2018 10:57 /
Jan Mareš Re: zavináč
2.12.2018 23:56 /
František Kučera Sraz
5.10.2018 17:12 /
Jakub Kuljovsky Re: Jaký kurz a software by jste doporučili pro začínajcího kodéra?
Více ...
|