これまでの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()
カテゴリー: Zabbix
PHP Fatal error: Allowed memory size of 134217728 bytes exhausted zabbix
/etc/zabbix/apache.confの
php_value memory_limit 128Mを512Mに変更する。
あとはapacheの再起動
php,iniと勘違いしていたためにハマったエラー
Minimum required PHP version is 8.0.0.
Zabbix7.0にてサーバ内ではphp8.3なのになぜ上記のエラーがでるのか。不思議だった。
php -vで確認しても8.3なのだが、chatgptに相談したところapacheでは、php7.4が採用されていたからであった。以下引用
確認方法 Apacheで有効なモジュールを確認:
bapache2ctl -M | grep php
結果に php8.3
のモジュールが含まれていない場合、php7.x
など古いバージョンが有効になっている可能性があります。
修正方法 古いPHPモジュールを無効化し、PHP 8.3を有効化:
bashコードをコピーするsudo a2dismod php7.x
sudo a2enmod php8.3
sudo systemctl restart apache2
PHPの動作確認
ApacheがPHP 8.3を使用しているか確認します。次の手順で動作確認を行います。
info.php
ファイルの作成:echo "<?php phpinfo(); ?>" > /var/www/html/info.php
- ブラウザでアクセス: サーバーのIPアドレスまたはドメインに以下を追加してアクセスします。
http://<サーバーのIP>/info.php
ubuntu20にてzabbix4.0から6.0までアップグレードした
ひとまず目的はタイトルの通り、今後7.0にあげる予定だけど、ひとまずここまでをまとめる。
参考にした記事は以下
https://tech.virtualtech.jp/entry/2022/07/28/172316
上記を参考にすると上手くいったが、データベースを5.0から6.0にアップグレードする前に、zabbixのバージョンを5.0から6.0にあげないとエラーを吐くので気を付けてほしい。
以下によると順序が重要らしい。
https://www.zabbix.com/forum/zabbix-help/446375-specified-key-was-too-long-max-key-length-is-3072-bytes
上記でもメモリ不足を吐いたので、キャッシュサイズを増やすと解決した。etc/zabbix/zabbix_server.conf
に以下を追記・変更します:
CacheSize=512M
本当はubuntu24.04にてアップグレードしたかったけど、zabbixserver5.0のソースがなかったので断念した。だれか教えてほしい
Zabbixのホストをhostsファイルに追記するシェルスクリプト
Zabbixでホストを大量に抱えていると一気にアラート発生したときに確認に苦労する。
例えば、「aaa.comでアラートが発生しました」とアラートが発生したら、
まず、踏み台サーバーのコンソールにログインし、aaa.comのIPをnslookupで取得する。
次に取得したIPでssh接続。原因を調べて解決。のような流れ。
今回は、nslookupでドメインからIPを取得する流れが面倒だったため、/etc/hostsファイルに追記することで、
ドメインでssh接続できるシェルスクリプトを考えてみた。
mkhosts.sh
#!/bin/bash
header='Content-Type:application/json-rpc'
apiurl='http://000.000.000/zabbix/api_jsonrpc.php'
json='{"jsonrpc": "2.0","method": "user.login","params": {"user": "zabbixのユーザー名","password": "Zabbixのパスワード"},"id": 1,"auth": null}'
zbxauth=$(curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} | jq -r ".result")
echo $zbxauth
json='{"jsonrpc": "2.0","method": "host.get","params": {"output": ["hostid","host"]},"id": 2,"auth": "'$zbxauth'"}'
echo $json | jq
hostlist=`curl -sS -X POST -H "${header}" -d "${json}" ${apiurl} | jq | grep "host"| grep -v "hostid" | awk -F: '{print $2}' | sed "s/\"/""/g" `
for i in $hostlist
do
#任意でnslookupの結果をIPのみに整形する
iplist=`nslookup $i | grep "Address" | grep -v "\#53" | awk -F: '{print $2}'`
echo "$iplist $i"| sed 's/^[ \t]*//' >> /etc/hosts
done
全体の流れとして、ZabbixのAPIからホスト名を取得し整形する。
次に取得したホスト名を引数にしてfor文でnslookupをかけてIPを取得する変数をつくる
最後に、echoで「IP ホスト名」の形にしたものを、/etc/hosts ファイルの最終行に追記する。
mkhosts.sh 実行後、/etc/hostsファイルを確認すると、
IP ホスト名
となっているはず。
その後、
ssh ホスト名
で対象のホストに接続できると思うので確認してみてほしい。
参考
https://www.zabbix.com/documentation/4.4/en/manual/api
https://tech-mmmm.blogspot.com/2019/02/zabbix-api.html
https://orebibou.com/ja/home/201607/20160712_003/
https://ex1.m-yabe.com/archives/3306
Zabbixでウェブサイトの監視の検証
Zabbixでweb監視とはhttpが落ちたアラートが表示されることだと思っていたけど、
どうやら違うようで調べてみた。
とりあえずZabbix内の設定>>ホストを確認してみる。
すると「web」があったのでアクセスする。
「webシナリオの作成」をアクセス。
まず、シナリオの箇所では、赤色の必須の箇所だけ記入する。

次に「ステップ」のカテゴリで「追加」を押して、名前とURLに自分のサイトのURLを記入する

上記設定で問題がなければ、「web」カテゴリから下記画像のようにダウンロードやレスポンスの速さを確認できる

サイトが落ちたことを知りたい場合、トリガー作成を選んで下記画像のように条件式を記入する。
条件式は「追加」から選べる

その後、自分のサイトのhttpdをストップしてサイトが表示できなくするとアラートが表示される。

この後、httpdをスタートしたらアラートが消えた。
自分のサーバー内に何個もサイトがあったら便利そう。
zabbixagent5.0をcentos7.9に設置する。
リポジトリの更新
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
Zabbixagentをインストール
yum -y install zabbix-agent
エージェントのバージョンを確認
zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 5.0.11
設定ファイルでIPを変更する
vi /etc/zabbix/zabbix_agent.conf
Server=10.xxx.xxx.xxx
ServerActive=10.xxx.xxx.xxx
サービス起動後、サーバーを再起動したときにエージェントが自動的に立ちあがるように設定する。
systemctl start zabbix-agent
systemctl enable zabbix-agent
ファイアウォールからポートを恒久的に開放する。
firewall-cmd --add-port=10050/tcp --permanent
firewall-cmd --reload
登録したポートを確認する。
firewall-cmd --list-ports
エラー発生時はログを確認する
/var/log/zabbix/zabbix_agentd.log
余談
Centos7.9だと普通のレポジトリでエージェントのバージョンを5.0として落とせないってことがあったら
練習環境のサーバーでは、SCL(ソフトウェアコレクション)って本来redhatとのサポートとは違うところからリポジトリをダウンロードしてからエージェント5.0を落としていた。でも本番環境ではrpmからリポジトリ更新したらよかったのでsclをインストールする必要はなかった
yum -y install centos-release-scl
参考
https://densan-hoshigumi.com/server/zabbix-50-centos7-apache-mariadb-install
https://eng-entrance.com/linux-centos-port
https://satimo.org/2020/07/zabbix-40-50-update/
参考
https://densan-hoshigumi.com/server/zabbix-50-centos7-apache-mariadb-install
https://eng-entrance.com/linux-centos-port
https://satimo.org/2020/07/zabbix-40-50-update/
Zabbix構築用のメモ
自分用のメモ
Zabbixの参考サイト
https://www.zabbix.com/jp/download?zabbix=5.0&os_distribution=ubuntu&os_version=20.04_focal&db=mysql&ws=apache
firewall等
https://tutorialcrawler.com/ubuntu-debian/ubuntu-20-04%e3%81%abzabbix%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%82%92%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/
mysqlの参考サイト
https://www.yokoweb.net/2020/08/16/ubuntu-20_04-server-mysql/
Zabbixのバージョン確認のコマンド
zabbix_server -V
[Zabbix]Message from [IP] is missing header. Message ignored.
上記のエラーは結論からすると、Zabbixのクライアントソフトとエージェントのバージョンに違いあると発生するエラー。これにはまったせいで、クライアントソフトからエージェントに接続することが出来なかった。
環境
Zabbixクライアント側:ubuntu16.04
Zabbixエージェント側:CentOS7.9
最初は、エージェント側の /var/log/zabbix/zabbix_agentd.log 以下にある
failed to accept an incoming connection: connection from "IP" rejected, allowed hosts: "127.0.0.1"
みたいなエラーが問題かと思っていてずっと検索していたけど解決しなかったから
クライアント側の /var/log/zabbix/zabbix_server.log を見てMessage from [IP] is missing header. Message ignored.
上記のエラーをググったところ解決した。
自分のZabbixのバージョンはクライアント側は3.2、エージェント側は4.4であった。
試しにクライアント側のバージョンを4.0にアップグレードしたところZabbixの通信が成功した。
その後のアラートメールの検証にも成功したので達成感で溢れている。
まぁ。ubuntuを最新バージョンにしてねって話。
参考
zabbixサーバとエージェントはバージョン合わせないと動かないことがあるっぽい
[Zabbix 3.2][Ubuntu 16.04] Zabbix環境構築手順まとめ
Ubuntu 16.04にzabbix 3.4をインストール
リリースされたばかりのZabbix 4.0を早速インストールしてみる(ubuntu16.04)(未完)
Zabbixを使ってエージェント無しで単純な Webサイト監視だけを行う最短の方法