Rocky9 で Zabbixのインストール

# Rockyインストール

以下ページから、ISOファイルダウンロード
https://rockylinux.org/ja/download

ネットワークは以下から設定。ファイルからは編集できないのかな??
```
# nmtui
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/41bdcf0d-8fce-9ed1-ae68-e7d7a85b8ce2.png)

エミュレータから接続ができるように変更
```
# vi /etc/ssh/sshd_config
PermitRootLogin yes
```
パッケージアップデート
```
# dnf -y update
```
SElinuxの無効化
```
setenforce 0
vi /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled or SELINUX=Permissive
```
あくまでテスト環境なのでFireWallは無効
```
systemctl stop firewalld
systemctl disable firewalld
```

タイムゾーン、ロケーション変更
```
timedatectl set-timezone Asia/Tokyo
dnf -y install glibc-locale-source glibc-langpack-ja
localectl set-locale LANG=ja_JP.UTF-8
```


# Zabbix

・MySqlインストール
Zabbixの手順の前にmysqlをインストールしておく
```
# dnf install mysql-server
# systemctl start mysqld
# systemctl enable mysqld
```
・Zabbixインストール
https://www.zabbix.com/download?zabbix=6.0&os_distribution=alma_linux&os_version=9&components=server_frontend_agent&db=mysql&ws=apache

http://[ホスト]/zabbixをアクセスし、ウィザードに従いセットアップする
ユーザー：Admin、初期パスワード：zabbix
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/2559b0a5-71a5-75a3-b9dd-d99187d0ae7c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/935973d5-3c48-72c6-f12a-21770bda01d0.png)


# Grafana

以下リンクから最新のバージョンのリンクを確認
https://grafana.com/grafana/download?edition=oss&platform=linux

```
# sudo yum install -y https://dl.grafana.com/oss/release/grafana-11.0.0-1.x86_64.rpm
# systemctl start grafana-server.service
# systemctl enable grafana-server.service
```
http://[ホスト]:3000/login を開く
ユーザー：admin、パスワード：admin
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/f3fd2bb2-ab7b-6a97-c81f-e3e351c8a6a1.png)

・Zabbixプラグライン
```
# sudo grafana-cli plugins install alexanderzobnin-zabbix-app
# sudo systemctl restart grafana-server.service
```
オフラインの場合
https://grafana.com/grafana/plugins/alexanderzobnin-zabbix-app/?tab=installation

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/3e7c826e-35e3-c6df-d13e-f3af667f09c6.png)

Data sources から Zabbixを選択
http://localhost/zabbix/api_jsonrpc.php
Connectionを入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/cc6ba160-b708-5e5a-2ece-c7edfa9da65e.png)

Zabbix WEBインターフェスにログインするユーザーとパスワード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/c5f21932-3104-9146-73f5-f96b91206175.png)

Enableにする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/0a900cd9-e016-58ff-129f-e36382fada73.png)

Data Sources から mysqlも選択
必要事項を入力

# Promtail
```
# sudo yum install -y https://github.com/grafana/loki/releases/download/v3.0.0/promtail-3.0.0.x86_64.rpm
# systemctl start promtail
# systemctl enable promtail

```

以下リンクから対象の一覧を確認可能。
http://[ホスト]:9080/targets

2つ以上を対象にする場合は、job_nameを追加する表示する対象を増やせる。

```
# vi /etc/promtail/config.yml
scrape_configs:
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      #NOTE: Need to be modified to scrape any additional logs of the system.
      #__path__: /var/log/messages
      __path__: /var/log/*log

- job_name: zabbix
  static_configs:
  - targets:
      - localhost
    labels:
      job: zabbix
      #NOTE: Need to be modified to scrape any additional logs of the system.
      __path__: /var/log/zabbix/*
```
対象とするフォルダには読取・実行の権限を付与する必要あり。
```
# chmod go+rx *
```

# Loki
以下リンクから最新のバージョンのリンクを確認
https://github.com/grafana/loki/releases/
```
# sudo yum install -y https://github.com/grafana/loki/releases/download/v3.0.0/loki-3.0.0.x86_64.rpm
# systemctl start loki
# systemctl enable loki
```
これでlokiの保存期間が設定できているはず
https://grafana.com/docs/loki/latest/operations/storage/retention/
```
vi /etc/loki/config.yml
compactor:
  retention_enabled: true
  delete_request_store: filesystem

limits_config:
  retention_period: 24h
```
以下URLが実データの保存場所指定の参考例
1-local-configuration-example.yamlがローカルディスクの指定例
https://grafana.com/docs/loki/latest/configure/examples/configuration-examples/

Data Sourcesから追加
http://localhost:3100

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/70042/1d675e77-ace7-4f40-a1fd-ff256207fb7e.png)

# rsyslog

サーバー側
/etc/rsyslog.conf

TCPで受信できるように以下をコメントアウトを外す
```
module(load="imtcp")
input(type="imtcp" port="514")
```

ログの保存先とファイルを指定するためテンプレートを作成
```
# IPアドレスでフォルダ分け
#### template ####
template(name="LogGroup001" type="string" string="/var/log/remote/%fromhost-ip%/%$year%-%$month%-%$day%.log")

# ホスト名でフォルダ分け
template　(name=”LogGroup001" “type”=string string=”/var/log/renite/%hostname%/%$year%%$month%%$day%.log")

```
受信するfacilityとpriority指定し、保存する先（テンプレートを指定）する
facility=ログの種類：例えば0だとカーネル関連、11だとftp関連等
priority=メッセージの種類：1だとアラート、6だとインフォメーション等
以下はすべての指定
```
#### rules ####
ruleset(name="ruleset001"){
   *.*  action(type="omfile" DynaFile="LogGroup001")
   stop
}
```
受信設定にルールセットを入れると定義に従って指定のフォルダに指定のファイル名でファイルを作成
```
module(load="imtcp")
input(type="imtcp" port="514" ruleset="ruleset001")
```

ルールの前に以下を指定しておくと、作成されるディレクトリやファイルの権限を指定できる
```
#新規ファイルのデフォルトのパーミッション
$umask 0000
 
#rsyslogディレクトリ、ファイルのデフォルトパーミッション指定
$DirCreateMode 0655
$FileCreateMode 0755
```
・クライアント側

転送するサーバーのIPアドレス、ポート、プロトコルを指定
```
action(type="omfwd" Target="XXX.XXX.XXX.XXX" Port="514" Protocol="tcp")
```
ローテーション
/etclogrotate.d/の配下で個別の設定をする
以下のように記載
```
# 例
/var/log/debug
/var/log/messages
{
    rotate 4 
    weekly
    missingok
    norifempty
    compress
    delaycompress
    sharedscripts
    postrotate
        /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true
    endscripts
}
```
rotate : 世代の指定。
daily：一日ごとにローテーション。weeklyは1週間、monthlyは1か月などの時間間隔が指定可能
missingok:ローテーションするログファイルがなくてもエラーをださない
notifempty:ログファイルが空の場合ローテーションしない
delaycompress:圧縮処理を次回ローテーション時まで遅らせる。compressとともに指定
maxsize:指定したサイズ以上になった時にローテーションする。daily、weekly、monthlyと併用して使用することで、時間間隔とサイズどちらの条件でもローテーションが可能
size [xx]:指定したサイズ以上になった時だけローテーション。こちらは時間間隔の併用はできない
sharedscripts:ログファイルを複数した場合にも、postrotate～endscripts間の処理を実行とのことですが、よくわかんらす？

```
/var/log/remote/*/[ログファイル名]
{
    missingok
    rotate 3
    size 10k
    copytruncate
}
```

強制実行すると接尾語が数字のシーケンシャルになるが、自動実行されるときは日付となる。自動実行だと/etc/logrotate.confをみるため、そちらにdateextが設定されているためこれが適用される。以下の強制実行は個別の設定ファイルを直接指定しているため、dateextがないため数字でシーケンシャルになる。
```
# 強制実行
logrotate -f /etc/logrotate.d/[ローテートファイル]

# デバックモード実行
logrotate -dv /etc/logrotate.d/[ローテートファイル]

# ログローテートのステータスが確認できるコマンド
cat /var/lib/logrotate/logrotate.status
```

logrotateは一日一回実行される。つまり、各ログごとに指定した内容が実行されるのは1日1回。容量を指定しても即座に実行されるのではなくて、1日1回チェックして、指定された容量以上になったらローテートされる。
```
# タイマー設定されている一覧を表示。logrotate.timerが一日一回実行される
systemctl list-timers

NEXT                        LEFT          LAST                        PASSED       UNIT                         ACTIVATES
Fri 2024-07-12 00:00:00 JST 15h left      Thu 2024-07-11 00:00:00 JST 8h ago       logrotate.timer              logrotate.service

# 中身をみてみると logrotate.confを読み込むらしい()の数字はよくわからんす
cat /usr/lib/systemd/system/logrotate.timer
[Unit]
Description=Daily rotation of log files
Documentation=man:logrotate(8) man:logrotate.conf(5)

[Timer]
OnCalendar=daily
AccuracySec=1h
Persistent=true

[Install]
WantedBy=timers.target
```

# 参考
https://zenn.dev/mohashi/articles/5f3c043c09d14c

https://qiita.com/murachi1208/items/3c0dab0f90b3ba992b06

https://www.notr.app/posts/2021/02/grafana/#grafana%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB