2024年11月7日木曜日

Google Cloud Storage でバケット内にオブジェクトがある場合でもバケットごと削除する方法

Google Cloud Storage でバケット内にオブジェクトがある場合でもバケットごと削除する方法

概要

gsutil を使う方法を紹介します

環境

  • macOS 15.0.1
  • gsutil 5.30

コマンド

  • gsutil rm -r gs://sound-bucket-log

参考サイト

2024年11月6日水曜日

iPhoneとChromeのパスワードを同期する方法

iPhoneとChromeのパスワードを同期する方法

概要

忘れるのでメモ

環境

  • iPhone 14 (iOS 18.0.1)
  • Chrome 130.0.6723.92

方法

設定 -> 一般 -> 自動入力とパスワード -> Chrome

のトグルをオンにする

最後に

iOS のバージョンによっては操作変わるかもです

2024年11月5日火曜日

App Engine APIs are not enabled 対策

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 を使って 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 の使い方

最新の 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 を使う

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.

(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 が追加でインストールする必要がありました

参考サイト