コンテンツへスキップ

これまでの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()

/etc/zabbix/apache.confの
php_value memory_limit 128Mを512Mに変更する。

あとはapacheの再起動

php,iniと勘違いしていたためにハマったエラー

  • APT:
    • ソースリストにあるリポジトリを更新して、パッケージ情報を取得し、必要なソフトウェアをインストールするツールです。
    • apt install などでパッケージを簡単にインストール・アップグレードできます。
  • DPKG:
    • パッケージファイル(.deb)を手動でインストールするためのツールです。
    • ソースリストにリポジトリを追加することで、APTがそのリポジトリを利用してソフトウェアを管理できるようにします。
    • dpkg -i は、手動でダウンロードした .deb パッケージをインストールするために使います。

APTとDPKGは、役割が異なるものの、連携してシステムのソフトウェア管理を担っています。

上記はchatgptの引用だけど、ソースリストに直接自分で追記できるならdpkg -iのコマンドは必要なさそう

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を使用しているか確認します。次の手順で動作確認を行います。

  1. info.phpファイルの作成:
    echo "<?php phpinfo(); ?>" > /var/www/html/info.php
  2. ブラウザでアクセス: サーバーのIPアドレスまたはドメインに以下を追加してアクセスします。
    http://<サーバーのIP>/info.php

ひとまず目的はタイトルの通り、今後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のソースがなかったので断念した。だれか教えてほしい

pleskサーバ環境のサブディレクトリにWordpressをインストールしようしたが、403エラーとなった。
パーミッション的に問題はなさそうである。

結果的に、wp-config-sample.phpからwp-config.phpをコピーで生成するとインストール画面が表示された。

他の検証環境で同様の事象を試したが、問題なくwp-config.phpなしでもインストール画面が表示されたので原因はサーバ側の何かかも

まずエラーログから確認すること。/var/log/以下に対象のエラーファイルがないか
探すこと。

今回の場合は、パスフレーズの設定が前回と不一致であったとのエラーログを確認した。

実際に、confファイルを確認すると以下に記載されていたファイルを確認すると確かにパスフレーズが不一致であった。
SSLPassPhraseDialog exec:/path/to/program:

パスフレーズを一致させるとhttpdが無事に起動した。

エラーログを確認せずに当てずっぽうに修正すると時間の無駄なので反省をしたい。

CloudLinuxサーバでroot側でrsyncがインストールされているのに、
cagefsにてユーザ側でrsyncがインストールされていない事象があった。

以下リンクによるとcagefsを有効にすると
デフォルトで無効になっているコマンドの一部にユーザ側にあるらしい

https://www.elinux.co.in/enable-rsync-for-users-on-cloudlinux/

その場合、ホスト側でインストールを追加する必要があった。
まずはrsyncされているか確認する

[/]# cagefsctl --list-rpm | grep -i rsync

何もリストにかえってこない場合、
以下コマンドにてrsyncをインストール可能

[[/]# cagefsctl --addrpm rsync
[/]# cagefsctl --update

ユーザ側でrsyncが利用可能になっていれば解決

セキュリティ的にwebサイトにIPアドレスでのアクセスをブロックすることを推奨します(Ddos攻撃とか)

今回はapacheの場合を記載します

Apache設定ファイルの編集:
通常、Apacheの設定ファイルは/etc/apache2/sites-available/または/etc/httpd/conf.d/にあります。000-default.conf や default.conf という名前のファイルを編集します。

ServerName domain.com
ServerAlias www.domain.com
DocumentRoot /var/www/html

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

# IPでのアクセスを拒否する設定
<Location />
    SetEnvIf Host ^[0-9\.]+$ ip_request
    Order Allow,Deny
    Allow from all
    Deny from env=ip_request
</Location>

ファイルを保存後にapacheを再起動します

sudo systemctl restart apache2