Azurenのお勉強② (Zabbix)
社内勉強会の準備として、今日はZabbixサーバーを構築してみました。
久しぶりにCentOSを触りました。
dnfとか言う謎のコマンドが導入されてて少し手こずりました。
Zabbixの公式インストール手順も、MySQLがすでにインストールされているのが前提になっていたり、
手順通りに進めただけではzabbix-serverがうまく起動しなかったりと、ちょっと困るところがいくつかありました。
www.zabbix.com
VMの費用はできるだけ無料プラン内で済ませたかったので、
サーバーのスペックは基本CPU:1core, RAM:1GBで構成しました。
最初は1つのVM上にzabbix-serverとapacheとMySQLを同居させようとしましたが、
メモリが足りずサーバーのレスポンスが遅すぎて諦めました。
結局VMを3つ用意して、それぞれのミドルウェアに1VMを割り当てることにしました。
それでもMySQLだけはメモリが足り無かったので、MySQLのVMはCPU:2core, RAM:4GBにしました。
Azureが提供する費用計算ツールを使ったところ、1時間あたり7円らしいので、社内勉強会までの1週間だけなら大した出費になりません。
よかった、よかった。
以前からRaspeberryPiにZabbixを入れることを検討してましたが、
今持っている3Bではメモリが足りないことが分かったので、
他のミドルウェアにするか、4Bを入手するか検討することにします。
今日も頑張りました!
Azureのお勉強① (Azure VPN Gateway)
会社の勉強会で発表するために、Azureを触ってみました。
会社のPCでデモをするのに、仮想マシンに安全に接続する方法が必要だったので、
VPN Gatewayを使ってみることにしました。
公式ドキュメント通りに手順を進めれば結構簡単に設定できました!
docs.microsoft.com
手元のPCがクラウド上のネットワークと繋がったときはなんだか感動しました。
クラウド上のサーバーたちが本当に近くにあるような感じがしました。
公式ドキュメントがわかりやすいのは本当にありがたい!
おかげさまでネットの海をさまよわずに済みました。
そしてこれが無料期間の対象内であるのもありがたい。
(無料期間2ヶ月目以降は Bastionの代わりにVPN Gatewayを使っていこう!)
今日も頑張りました!
英語字幕DB作成への道_Selenium編③ (Cookie)
Selenium最初の壁にぶち当たりました。
Cookieを使いまわしてログイン処理を省くことができない..
ログインするところまでは自動化できたのですが、
その時のCookieを保存しておいて、次回サイトにアクセスするときにそのCookieを使うことができません。
私が想像してた処理の流れはこんな感じ
・初回アクセス時: ログイン => get_cookies() でCookieを取得して、json.dump()でjsonファイルに保存しておく
・2回目以降: json.load() でjsonを読み込んで、add_cookie() でCookieにセットしてから、サイトにアクセス => ログインを省略
でもうまく行きませんでした。
これだと2回目以降のアクセス時にログイン画面にリダイレクトされてしまいます。
(Cookieをみても認証済みユーザーだと思ってもらえてない)
うーん、難しい。果たして何が原因なのだろうか。
でも今日も頑張りました!
英語字幕DB作成への道_Selenium編③ (XPATH)
要素を見つけるときにidもnameも使えない状況に陥りました。
そんなときに使えるのがXPATH。
www.selenium.dev
今回は button要素の data-testid という属性を検索したかったので、こんな記述になります
//button[@data-testid='password-continue-login
XPATHには何度もお世話になりそうなのでこんな感じで実装してみました
def get_el_by_xpath(xpath: str): input = WebDriverWait(driver, timeout=120).until( lambda d: d.find_element(by=By.XPATH, value=xpath) ) return input button = get_el_by_xpath("//button[@data-testid='password-continue-login']")
ものすごい便利!!
どんな要素でも取れる気がしてきた!
今日も頑張りました。
TVサーバーのパフォーマンス問題③(ネットワーク帯域_RaspberryPi)
TVサーバーのライブ視聴時の画面のカクつきがひどいので、
ネットワークの帯域を調べてみました。
使用したのは iperf3
ノートPCとRaspberryPiの両方にインストールして、
ノートPC(Client)→RaspberryPi(Server)の方向で通信して帯域を測ってみました。
$ sudo apt install iperf3 $ iperf3 -c 192.168.0.100 Connecting to host 192.168.0.100, port 5201 [ 5] local 192.168.0.161 port 60466 connected to 192.168.0.100 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 3.75 MBytes 31.4 Mbits/sec 0 215 KBytes [ 5] 1.00-2.00 sec 4.72 MBytes 39.6 Mbits/sec 0 393 KBytes [ 5] 2.00-3.00 sec 4.16 MBytes 34.9 Mbits/sec 0 536 KBytes [ 5] 3.00-4.00 sec 4.74 MBytes 39.7 Mbits/sec 0 696 KBytes [ 5] 4.00-5.00 sec 3.75 MBytes 31.5 Mbits/sec 0 875 KBytes [ 5] 5.00-6.00 sec 3.75 MBytes 31.5 Mbits/sec 0 689 KBytes [ 5] 6.00-7.00 sec 3.75 MBytes 31.5 Mbits/sec 0 742 KBytes [ 5] 7.00-8.00 sec 3.75 MBytes 31.5 Mbits/sec 0 824 KBytes [ 5] 8.00-9.00 sec 5.00 MBytes 42.0 Mbits/sec 0 867 KBytes [ 5] 9.00-10.00 sec 3.75 MBytes 31.5 Mbits/sec 0 901 KBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 41.1 MBytes 34.5 Mbits/sec 0 sender [ 5] 0.00-10.04 sec 38.2 MBytes 31.9 Mbits/sec receiver iperf Done.
実測値は約32〜35Mbpsでした。
問題はライブ視聴中にこの帯域をどのくらい使っているか、です。
ノートPC側のUbuntuのシステムモニターで見てみました。
全然使ってない...
これネットワークは余裕あるな...
じゃあどこがボトルネックなんだーーーー!?
..といいつつ、CPUが少し不思議な動きをしているのを見つけたので、今度はそれについて調べてみよう。
まあ今回はネットワーク帯域の調べ方が学べて良かった良かった!
英語字幕DB作成への道_Selenium編② (Explicit Wait)
Elementが作成されるのを待たずにElementを探しに行ってしまい、NoSuchElementExceptionが出てしまう問題を解決するために、ExplicitWaitの勉強をしました。
他にもImplicitWaitとFluentWaitという方法がありますが、ExplicitWaitが使えれば事足りそうだったので、とりあえずこれだけ使えるようになろうと思いました。
from selenium.webdriver.support.ui import WebDriverWait driver.navigate("file:///race_condition.html") el = WebDriverWait(driver, timeout=3).until(lambda d: d.find_element_by_tag_name("p")) assert el.text == "Hello from JavaScript!"
こんな感じで、WebDriverで呼び出したい関数を、無名関数でくるんでuntil関数に渡して上げれば良いようです。
時間はtimeoutのところで秒数を設定してあげると。
これだけで、timeoutに設定した秒数の間はNoSuchElementを無視して何度もリトライしてくれるみたいです。
成功すればWebDriverで呼び出した関数の返り値が帰ってきて、失敗するとTimeoutの例外になるそうです。
シンプルでわかりやすい!!
今日も頑張った! おやすみなさい!