Lubuntu で作業してたけどFirefoxが急に固まってこまってたけどSWAP足したらすぐ解決

プログラミング作業用の環境をHyper-VでLubuntuで物理メモリは2G割り当てて作って使っている。

VS Code突っ込むのはしんどかろうと思ったのでAtomエディタ+Terminal+Firefoxだけを立ち上げて、それで必要な作業は全部できるようになったので、いやいやいい時代だとやってたけど、どうしても時々Firefoxが急にハングしてしまう。だんだん重くなって固まるとかでなくて突然。

うーん、って思ってたけど、あ、スワップじゃないか、とおもったら案の定Swapがデフォルトだと512Mしかない。2GB追加してみる。

$ sudo dd if=/dev/zero of=/swapfile2 bs=1024 count=2M
2097152+0 records in
2097152+0 records out
2147483648 bytes (2.1 GB, 2.0 GiB) copied, 7.09391 s, 303 MB/s

$ sudo mkswap /swapfile2
$ sudo chmod 0600 /swapfile2

$ sudo vim /etc/fstab
[add]
/swapfile2                                swap           swap    defaults   0 0

$ sudo swapon /swapfile2

$ free -h
total        used        free      shared  buff/cache   available
Mem:           1.9Gi       1.2Gi        80Mi       209Mi       598Mi       310Mi
Swap:          2.5Gi       943Mi       1.6Gi

たったこれだけで完了。簡単かよ。しかもFirefox、超安定。幸せだ。生まれてきてよかった。

Windows スリープ復帰早すぎて

会社から貸与されているLaptop PCのThinkPadで、Windows 11で、Core-i5 1145G7で、DDR4 16GBって感じでぼちぼち世代が新しくなったんだけど、フタ閉じてる状態で多分スリープになってるはずなんだが、開けた瞬間に0.2秒くらいで復帰してスクリーン入ってるもんだから、スリープできてなかったのか?って毎回一瞬戸惑う。

何でもパフォーマンスよ過ぎりゃいいってものでもないな、、、となんか苦笑。

Grafanaを活用して自前Webアプリでダッシュボードを作る(4) – 厳しそうなので打ち切る

Grafanaを使って、自分の工数管理Webアプリのダッシュボードページにかっこいいパネルを並べる構想をしていたけど、この使いみちは厳しいということがわかったので諦める。

  • Time Seriesのデータであることが前提すぎる。Time Series以外のデータを扱う方法がこんなのとか見つかったんだけど、実際やってみてある程度マシにはなるけど、これで全部やるかとかはやってられない。
  • PanelだけEmbedで自分のアプリに流用する使い方がしたかったけど、やっぱりそんな曲がった使い方のために作られていないので、データのフィルタとか権限制御に無理がある。

やっぱりPythonでやるしかないってことでグラフに関してはSeabornを確認して使っていくことで決心。

Excelのグラフ機能って偉大だな・・・

Grafanaを活用して自前Webアプリでダッシュボードを作る(3) – Prometheusと連携

せっかくGrafanaを入れたので、色々Webを見ているとどうもサーバ監視とかに使うのが本流のツールのようなのでPrometheusとの連携をやってみる。

こちらのLinkを見てみると、Ubuntuの場合たった2行、ターミナルにaptコマンドを打ち込むだけでNode ExporterとPrometheusが導入できるそうな・・・。どれだけ簡単なんだ。

https://www.server-world.info/query?os=Ubuntu_20.04&p=prometheus&f=1

Node ExporterというのはどうもOSの各種統計情報を吐き出すツール、Prometheusはそれをためるツール、それをGrafanaでダッシュボードっぽく見やすくする、みたいな構成が多いらしい。

サーバリソースが見えるようになった。これ、今までこんな風にやったことなかったから少し感動だなあ。NextCloud + PhotoPrismの組み合わせってずっと変な処理動いてて重いような、疑ってたけど、そのへんよく見えるようになった。NextCloudのCron処理とかちょっと感覚空けて少なめにしてみた。

Grafanaを活用して自前Webアプリでダッシュボードを作る(2) – インストールまで

クラウドではなくSelf-Managed版を使う。Ubuntu 22.04に導入して動くところまでの確認と、どれくらいのサーバ負荷なのかを確認してみるところまでやってみたい。以前試したNextCloudとかPhotoPrismとかあんなレベルだとちょっときついけどどうだろう。

ここら辺にインストール方法が書いてあるけど、簡単そうだな・・・。メモるほどでもないかも。ただ、Editionの選択がEnterpriseではなくてOSSに変えてあげるところだけ忘れないようにする。
https://grafana.com/grafana/download?pg=get&plcmt=selfmanaged-box1-cta1&platform=linux

sudo apt-get install -y adduser libfontconfig1
wget https://dl.grafana.com/oss/release/grafana_9.2.0~beta1_amd64.deb
sudo dpkg -i grafana_9.2.0~beta1_amd64.deb

dpkgコマンドでインストールが完了し、以下がシェルにだらだらッと表示された。導線良くて助かるなあ。

Selecting previously unselected package grafana.
(Reading database ... 107757 files and directories currently installed.)
Preparing to unpack grafana_9.2.0~beta1_amd64.deb ...
Unpacking grafana (9.2.0~beta1) ...
Setting up grafana (9.2.0~beta1) ...
Adding system user `grafana' (UID 110) ...
Adding new user `grafana' (UID 110) with group `grafana' ...
Not creating home directory `/usr/share/grafana'.
### NOT starting on installation, please execute the following statements to 
 configure grafana to start automatically using systemd
 sudo /bin/systemctl daemon-reload
 sudo /bin/systemctl enable grafana-server
### You can start grafana-server by executing
 sudo /bin/systemctl start grafana-server

無事起動したっぽいように見えたけど、なんかおかしい。

tky@terry:~$ sudo systemctl status grafana-server
× grafana-server.service - Grafana instance
     Loaded: loaded (/lib/systemd/system/grafana-server.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Sun 2022-10-02 03:25:57 UTC; 4min 48s ago
       Docs: http://docs.grafana.org
    Process: 109549 ExecStart=/usr/sbin/grafana-server --config=${CONF_FILE} --pidfile=${PID_FILE_DIR}/grafana-server.pid --packaging=deb cfg:default.paths.logs=$>
   Main PID: 109549 (code=exited, status=200/CHDIR)
        CPU: 42ms

Oct 02 03:25:57 terry systemd[1]: grafana-server.service: Scheduled restart job, restart counter is at 5.
Oct 02 03:25:57 terry systemd[1]: Stopped Grafana instance.
Oct 02 03:25:57 terry systemd[1]: grafana-server.service: Start request repeated too quickly.
Oct 02 03:25:57 terry systemd[1]: grafana-server.service: Failed with result 'exit-code'.
Oct 02 03:25:57 terry systemd[1]: Failed to start Grafana instance.

Webを相当探したけど、結局よくわからず、一度grafanaアンインストールしてこっちの手順でaptでいれたら動いた。なんだったんだ。

$ sudo apt-get install -y gnupg2 curl
$ curl https://packages.grafana.com/gpg.key | sudo apt-key add -
$ sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
$ sudo apt-get update
$ sudo apt-get -y install grafana
$ sudo systemctl start grafana-server

画面をぐりぐり動かしてみているけど、サーバにかかる負荷小さいな。

適当にMySQLのデータをPanelにしてみるけどこれも問題なし。

いじってて見つけたのだけど、Organizationっていう機能がある。これ、pythonとかのスクリプトとかで自動生成してテンプレのDashboardをImportしてWebアプリ側に合わせて動かすとかできるのかな・・・。

この辺はちょっと勉強していかないとな。しかし日本語化は全くできないようだなあ。これ後々障壁になるかな。

Grafanaを活用して自前Webアプリでダッシュボードを作る(1)

自前のWebアプリ(Python Django)を作っているのだけど、ポンと入ったトップページに昨今のBIツールっぽいダッシュボードがあるといいなと思い、どうにも気になって調べ始めている。要件は

  1. MySQLに格納されているDBのデータをガッと集計してダイジェストの情報を表示
  2. Grafanaのサーバは別で起動して、embedかなんかで表示させる
  3. 権限制御(Webアプリには組織単位でのデータがあるので、他組織のデータなんかが見えるとまずい)

1も2もできることは確認しているのだけど、3がどうにもわからん。

英語が多いので、そもそものところから調べながらどこまで使えるか確認してみる。

Django Model のAnnotateが難しくて少し悩んだ

Viewで

result = SomeModel.objects.filter(p=p).values('key__id').annotate(sum=models.Sum('value'))

って感じでannotateでとあるキーに合致するレコードのサマリをとろうとしたのだが、resultはQuerySetだから

result[0]['sum']

なんてアクセスするとエラー(list index out of range)がでて、あー、だめなのかって思った。そこで

result.first()['sum']

ってやると、あー動いた動いたって安心してたんだけども、どうも合計が10.0あるレコードも集計されてなくて1.0とかになっておかしい。first()のせいで、1レコード分だけをSumしている挙動と思われる・・・。[0]自体はよくて、集計対象の行がないときに[0]はエラーになっているというだけなのだった。つまりこれでよかった。

if(result.count == 0):
    val = 0
else:
    val = resuilt[0].get('sum')

なんかコードがすっきりしないけど、これくらいなら1行で書く方法が何かありそう。
PHPだと $a = ( $i == “OK” ? True : False ) みたいなのができたけどpythonもあるのかな。

追記:調べてたら見つけた。

val = 0 if result.count == 0 else result[0].get('sum')

python django使うことにしたのはなぜかメモ

  • 正直CakePHP2でやりたいことは全部できるから別にいいと思っていたが、Viewもなにもかもarray( )だし$var[0][‘Item’][‘Attribute’]とかなんとかタイピング量がおおくて体力が削れる
  • RoRがまだ主流なことにおどろくものの今さら感がなあ。
  • laravelもいいけど、python触ってみたいな
  • 情報量一番多そうなやつ → django当確。
  • 結局Webアプリ開発って、やりたいことググって人のまねしまくって自分のほしいものを作るってだけなので。
  • Djangoはまあまあ使えるけどなんか痒いところにてが届かないなー、と思う。あとurlルーティングめんどくさい。CakePHP2が楽すぎただけ?

とか、勤務先の社食でごはん食べながらかいていたら、前に座った人がふところからラー油取り出してて、なんだこの人、ラー油常に持ってるのか。