2024年11月6日水曜日
2024年11月5日火曜日
App Engine APIs are not enabled 対策
概要
対応方法を紹介します
エラー詳細
- gcloud app logs tail -s default
2024-10-29 04:54:19 default[20241029t134559] 2024/10/29 04:54:19 internal.flushLog: Flush RPC: Call error 7: App Engine APIs are not enabled, please add app_engine_apis: true to your app.yaml to enable.
環境
- google-cloud-sdk 491.0.0
- golang runtime 122
app.yaml を修正
以下を追加します
app_engine_apis: true
最後に
最新のラインタイムv2を使う場合は必要です
2024年11月1日金曜日
mtail を使って nginx にアクセスが来ているかを Prometheus で監視する方法
概要
mtail指定したログの行数を Promethues 用のメトリックスとして返してくれる exporter です
今回は nginx と連携して nginx のログを監視する compose を紹介します
環境
- Ubuntu 24.04
- docker 27.3.1
- mtail 3.0.8
compose.yaml
nginx を起動しアクセスログをホスト側でマウントします
mtail 側ではホスト側のマウントした nginx のログを更にコンテナ側にマウントします
mtail の公式イメージは dockerhub で公開されていないので Dockerfile.mtail を作成し自分でビルドしてイメージを作成します
あとは mtail の設定を作成します
services:
nginx:
image: nginx:latest
container_name: nginx_server
ports:
- "8080:80"
volumes:
- ./nginx/log:/var/log/nginx
networks:
- monitoring_net
mtail:
container_name: mtail_monitor
build:
context: .
dockerfile: Dockerfile.mtail
ports:
- "3903:3903"
volumes:
- ./nginx/log:/var/log/nginx:ro
- ./mtail/progs:/mtail/progs:ro
networks:
- monitoring_net
command: >
-logtostderr
-logs /var/log/nginx/access.log
-progs /mtail/progs
networks:
monitoring_net:
driver: bridge
Dockerfile.mtail
golang は執筆時の最新を使っています
mtail 自体のインストールはバイナリまたは自分でソースビルドするしかないので今回はバイナリファイルを使います
また mtail でメトリックスを取得するためのポートを expose します
FROM golang:1.23.2
RUN wget https://github.com/google/mtail/releases/download/v3.0.8/mtail_3.0.8_linux_amd64.tar.gz
RUN tar zvxf mtail_3.0.8_linux_amd64.tar.gz
RUN mv mtail /go/bin
EXPOSE 3903
ENTRYPOINT ["/go/bin/mtail"]
mtail/progs/log.mtail
mtail 用の設定ファイルを作成します
アクセスがきたときにカウントする変数を用意します
今回は nginx のどのパスにアクセスが来てもカウントをプラス1するようにします
counter nginx_requests_total
/^.*$/ {
nginx_requests_total++
}
動作確認
- docker compose up -d
で各種コンテナを作成しましょう
- curl localhost:3903/metrics
にアクセスするとメトリックスが確認できます
更に
- curl localhost:8080
にアクセスし再度メトリックスを確認するとカウンタが1進んでいるのが確認できると思います
おまけ: 特定のパスのみカウントする方法
- vim nginx/nginx.conf
events {}
http {
server {
listen 80;
location /status {
default_type application/json;
return 200 '{"status":"ok"}';
}
# 他のリクエストをデフォルトの404にする場合
location / {
return 404;
}
}
}
- vim compose.yaml
services:
nginx:
image: nginx:latest
container_name: nginx_server
ports:
- "8080:80"
volumes:
- ./nginx/log:/var/log/nginx
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
networks:
- monitoring_net
mtail:
container_name: mtail_monitor
build:
context: .
dockerfile: Dockerfile.mtail
ports:
- "3903:3903"
volumes:
- ./nginx/log:/var/log/nginx:ro
- ./mtail/progs:/mtail/progs:ro
networks:
- monitoring_net
command: >
-logtostderr
-logs /var/log/nginx/access.log
-progs /mtail/progs
networks:
monitoring_net:
driver: bridge
- vim mtail/progs/log.mtail
counter nginx_requests_total
/status/ {
nginx_requests_total++
}
最後に
mtail を使ってログの行数を Promethues のメトリックス形式で取得する方法を紹介しました
mtail 側からログファイルにアクセスできればどんなファイルでも監視することができます
ファイルは単純なテキストファイルなどでも良いです
2024年10月31日木曜日
最新の dev_appserver.py の使い方
概要
過去の手順だと動作しないランタイムがあるので最新の手順を紹介します
環境
- macOS 15.0.1
- Python 3.11.10
- google-cloud-sdk 491.0.0
- golang runtime 122
google-cloud-sdk のインストール
- brew install google-cloud-sdk
dev_appserver.py があるか確認
- ls /opt/homebrew/share/google-cloud-sdk/bin/dev_appserver.py
python の設定
グローバルにインストールした python3 でも OK です
- pyenv local 3.11.10
実行
-
python /opt/homebrew/share/google-cloud-sdk/bin/dev_appserver.py .
最後に
すでにサポートされていないランタイムだとこの方法では動作しないので注意してください
参考サイト
2024年10月30日水曜日
Python の JIT numba を使う
概要
とりあえず試せるコードを紹介します
環境
- macOS 15.0.1
- Python 3.11.10
- numba 0.60.0
インストール
- pipenv install numpy numba
サンプルコード
import time
import numpy as np
from numba import jit
# 通常のPython関数
def sum_array(arr):
total = 0
for i in arr:
total += i
return total
# Numbaを使用した関数
@jit(nopython=True)
def sum_array_numba(arr):
total = 0
for i in arr:
total += i
return total
# 配列の準備
array_size = 10**7
arr = np.random.rand(array_size)
# 通常のPython関数の実行時間を計測
start_time = time.time()
sum_array(arr)
end_time = time.time()
print(f"通常のPython関数の実行時間: {end_time - start_time} 秒")
# Numbaを使用した関数の実行時間を計測
start_time = time.time()
sum_array_numba(arr)
end_time = time.time()
print(f"Numbaを使用した関数の実行時間: {end_time - start_time} 秒")
結果
-
pipenv run python app.py
通常のPython関数の実行時間: 0.46547412872314453 秒
Numbaを使用した関数の実行時間: 0.17465901374816895
確かに速いです
最後に
使い所としては計算処理なので Web アプリなどでは使い所が難しいです
機械学習で使うにしてもライブラリ側ですでに使っているケースなどもあるので自分で使うケースがないのかも
2024年10月29日火曜日
(unattended-upgrade) Could not figure out development release: Distribution data outdated. Please check for an update for distro-info-data. See usr share doc distro-info-data README.Debian for details.
概要
Ubuntu を 22 -> 24 に更新したら unattended-upgrade が動かくなったのでその対応です
環境
- Ubuntu 24.04
対応方法
-
sudo apt install --only-upgrade distro-info-data
動作確認
- sudo unattended-upgrade
最後に
distro-info-data が追加でインストールする必要がありました
参考サイト
2024年10月28日月曜日
Google Chrome をプロフィールを指定して open コマンドで開く方法
概要
プロフィールはなぜかインデックス番号付きのディレクトリで管理されているのでそのディレクトリ名を指定することでプロフィール指定して Chrome を開くことができます
環境
- macOS 15.0.1
- Google Chrome 129.0.6668.100
コマンド
-
open -a "Google Chrome" --args --profile-directory="Profile 1"
プロフィールがどの Google アカウントに紐づくか確認する方法
なぞにディレクトリにスペースが含まれているので find + while を使って Profile ディレクトリ配下にある Preferences ファイルを調査する感じです
-
cd ~/Library/Application\ Support/Google/Chrome/
-
find . -type d -name "Profile\ *" | while IFS= read -r i; do echo ${i}; cat ${i}/Preferences | jq '.account_info[].full_name'; done
最後に
このプロフィールディレクトリのインデックス番号は追加したプロフィール順になるのでもし環境をまたいで同じプロフィール番号で起動する場合には追加する順番に注意が必要です