4,5年前にとある案件の没ラフだったのですが、今年の夏に北海道庁旧本庁舎がリニューアルするとのことで完成させました。
なつかしさと思い入れがあります。肌の色に静脈の青を入れたり麦わら帽子の描き方などいろいろと苦労した思い出よみがえりました。
最近はイラストを描いてないのでまた描きたい。
メルカリで売り上げ合計をだした
最近メルカリで不用物を整理しています
初めて数ヶ月も経ち、そろそろ売り上げを確認したかったのですが、
メルカリって売り上げの合計がありません。
なので、自分でデータベースの練習がてらにソフト作成したかったのですが、
APIがないためどうしようかと思っていたところすでに便利なサイトがありました。
◾️メルカリの売上管理表をスプレッドシートを使って自動で作ろう。
https://intellectual-productivity.com/how-to-mercari-summary-automate
ただ、合計値がわからないので、chatgptに相談しつつ以下のようなコードにして
合計値と手数料-10%を引いた額が出力されるようにしました
function mercari_summary() {
var threads = GmailApp.search('subject:発送をお願いします -label:処理済み');
threads.forEach(function(thread) {
var messages = thread.getMessages();
messages.forEach(function(message) {
var plainBody = message.getPlainBody();
var date = message.getDate();
var product_ID = plainBody.match(/商品ID : (.*)/);
var product_name = plainBody.match(/商品名 : (.*)/);
var product_price = plainBody.match(/商品価格 : (.*)/);
var sheet = SpreadsheetApp.getActive().getSheetByName('売上リスト');
var lastRow = sheet.getLastRow() + 1;
sheet.getRange(lastRow, 1).setValue(product_ID[1]);
sheet.getRange(lastRow, 2).setValue(product_name[1]);
sheet.getRange(lastRow, 3).setValue(product_price[1]);
sheet.getRange(lastRow, 4).setValue(date);
});
});
// ▼▼ 合計と90%の計算 ▼▼
var sheet = SpreadsheetApp.getActive().getSheetByName('売上リスト');
var data = sheet.getRange(2, 3, sheet.getLastRow() - 1).getValues(); // C列のデータ(2行目〜)
var sum = 0;
data.forEach(function(row) {
var val = row[0];
if (typeof val === 'string') {
val = val.replace(/[円,]/g, ''); // 円とカンマを除去
}
var num = parseFloat(val);
if (!isNaN(num)) {
sum += num;
}
});
// 合計と90%の表示(F1, G1, F2, G2)
sheet.getRange(1, 6).setValue('合計');
sheet.getRange(1, 7).setValue(sum);
sheet.getRange(2, 6).setValue('90%');
sheet.getRange(2, 7).setValue(sum * 0.9);
// スタイル設定(F1:G2)
var range = sheet.getRange('F1:G2');
range.setFontWeight('bold'); // 太字
range.setBackground('#d9ead3'); // 薄緑色の背景
range.setFontColor('#000000'); // 文字色を黒に
range.setHorizontalAlignment('right'); // 右寄せ
}
結果として以下のようになります

90%の部分を手数料込みと変換してもいいかもですね。小数点も切り捨てていいかも
【zabbix7.2】ホストにマクロを作成して、トリガーに反映させる
zabbixのマクロはテンプレートからだけではなく、ホストグループやホストから作成できることを知ったので試してみた。
zabbixのGUIにて適用なホストを選択後、マクロに移動する。
以下のようなマクロを作成した。

マクロ名は{$TESTF}にし、値は50にした。
トリガーにマクロを反映させる。

トリガーの内容はひとまず置いておき、{$TEST}を反映させた。
反映されているか、グラフで確認するとしきい値が50以上になっていたので反映されていることを確認。

実際にアラートを意図的に発生させるとダッシュボードにて反応を確認した。


アイテムの数値は98なので、マクロの値を100に変更した。

しきい値が100にかわり、アラートが消えたことを確認したので検証を終了した

ZABBIX7.0にオリジナルのアイテムとトリガーを作成する
zabbixのアイテムについてはキーが重要だと認識した
キーはあらかじめzabbixagentの公式に用意されているが、大量なので
テンプレから確認したほうがはやいと思う
今回はそのキーをchatgptに聞きながら自作してみた。
zabbix.agnet.confに定義する
agentの設置先のサーバ側のconfに以下を記載した
上記は、*内のディレクトリ先にあるファイルの数をチェックする
UserParameter=custom.logs.count[*],/bin/ls $1 | wc -lcustom.logs.countがアイテム名で、[*]内はzabbixのアイテム作成時に
指定したディレクトリを指定したらよい
記載後はzabbix.agentを再起動する
反映されているかは以下コマンドで確認可能
zabbix_agentd -t custom.logs.count[/var/log]
custom.logs.count[/var/log] [t|98]
上記の場合は、98個のファイルが/var/logにあることがわかる
webインターフェースにてアイテムを作成する

zabbixのwebにて対象のホストに「アイテムの作成」後、上記画像のように設定した。
テストにて問題なければトリガー作成に進む
トリガーを作成する

アイテム同様にトリガー作成から上記画像のように設定した。
条件式についてはchatgptでは式が違ったので、他のトリガーを参考にして作成した。
(構文については今後、学習予定)
/var/log/以下のファイル数が98個とわかっていたので、アラートを鳴らすために80以上になったら
アラート発生するようにした。
有効になっていれば以下のようにアラート発生となる

トリガーの条件を80から100に変えると上記アラートが消えたことを確認した。
今回の個人的な気づきとして、アイテムが監視間隔を決めていたこと。
トリガーはあくまで判定のみの役割であった。
zabbix7.0にてマクロのしきい値を変える
データ収集>テンプレートからマクロの設定が可能

サーバ内のメモリを確認して、memoryの値が5000M以下ならアラートがでるように変更した


上記のように変更して保存するとアラートが発生した

上記確認後、設定を5000Mから20Mに変更するとアラートが消えたことを確認した
zabbix7の言語が日本語対応しない
上記を参考に解消
WordPressのデータ移行時にTOP以外404エラーについて
WordPressのデータ移行時に、移転元にてftpでwgetしたあと、ドキュメントルートにてmv file/* . としたあと、サイト確認がTOP以外404エラーだった。
llコマンドにてwgetしたファイルの中身を確認すると、.htaccessが残っていたので、それも移動したら全サイトページが表示された。
ChatgptによるとWordPressは
.htaccessがindex.phpにユーザのリクエストを渡すことでページが表示される仕組みらしい
ユーザーのリクエスト ↓ .htaccessがindex.phpに転送 ↓ index.php が WordPress 本体を読み込む ↓ 「about」に該当するページを検索 ↓ ページを表示 or 404エラーページ
zabbix7.2にてAPI操作するための例
これまでのapiの取得方法だとapiのauth認証の問題によりエラーが発生。
chatGPTと粘って会話したところ以下の方法にて成功したので、メモをする
python3 コマンドにて実行可能
hosts_get.py
import requests
import json
url = "https://yourdomain/zabbix/api_jsonrpc.php"
headers = {
'Authorization': 'Bearer apitoken',
'Content-Type': 'application/json-rpc'
}
# host.get リクエスト
def get_hosts():
payload = {
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "host", "name"],
"sortfield": "name" # 名前順にソート
},
"id": 1
}
# リクエストを送信
response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()
# 結果を見やすく表示
if 'result' in data:
with open("hosts.txt", "w") as file:
for host in data['result']:
line = f"Host ID: {host['hostid']}, Host: {host['host']}, Name: {host['name']}\n"
print(line.strip()) # コンソールにも出力
file.write(line) # ファイルに書き込み
print("✅ ホスト一覧を 'hosts.txt' に出力しました。")
else:
print(f"Error: {data.get('error', 'Unknown error')}")
# 実行
if __name__ == "__main__":
get_hosts()
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted zabbix
/etc/zabbix/apache.confの
php_value memory_limit 128Mを512Mに変更する。
あとはapacheの再起動
php,iniと勘違いしていたためにハマったエラー
aptとdpkgの違いのメモ
- APT:
- ソースリストにあるリポジトリを更新して、パッケージ情報を取得し、必要なソフトウェアをインストールするツールです。
apt installなどでパッケージを簡単にインストール・アップグレードできます。
- DPKG:
- パッケージファイル(.deb)を手動でインストールするためのツールです。
- ソースリストにリポジトリを追加することで、APTがそのリポジトリを利用してソフトウェアを管理できるようにします。
dpkg -iは、手動でダウンロードした .deb パッケージをインストールするために使います。
APTとDPKGは、役割が異なるものの、連携してシステムのソフトウェア管理を担っています。
上記はchatgptの引用だけど、ソースリストに直接自分で追記できるならdpkg -iのコマンドは必要なさそう