ウェブサイト検索

Rocky LinuxにTIGスタック(Telegraf、InfluxDB、およびGrafana)をインストールする方法


Rocky LinuxにTIGスタック(Telegraf、InfluxDB、およびGrafana)をインストールする方法

このページで

  1. 前提条件
  2. ステップ1 - ファイアウォールを設定する
  3. ステップ 2 - InfluxDB をインストールする
  4. ステップ3 - InfluxDBデータベースとユーザー資格情報を作成する
  5. ステップ4 - Telegrafをインストールする
  6. ステップ5 - Telegrafの統計がInfluxDBに保存されているか確認する
  7. ステップ6 - Grafanaをインストールする
  8. ステップ7 - Grafanaデータソースを設定する
  9. ステップ8 - Grafanaダッシュボードを設定する
  10. ステップ9 - アラートと通知の設定

    1. ルール
    2. 条件
    3. データなしおよびエラーハンドリング
    4. 通知
  11. 結論

TIG(Telegraf、InfluxDB、Grafana)スタックは、システムメトリックの収集、保存、グラフ化、アラート作成を簡素化するためのオープンソースツールのプラットフォームの頭字語です。メモリ、ディスクスペース、ログイン中のユーザー、システム負荷、スワップ使用量、稼働時間、実行中のプロセスなどのメトリックを一箇所から監視し視覚化することができます。スタックで使用されるツールは次の通りです:

  • Telegrafは、データベース、システム、IoTセンサーからデータとイベントを収集して送信するためのオープンソースのメトリクス収集エージェントです。収集したデータを送信できるInfluxDB、Graphite、Kafkaなどのさまざまな出力プラグインをサポートしています。
  • InfluxDB - は、Go言語で書かれたオープンソースの時系列データベースです。高速で高可用性のストレージに最適化されており、メトリクス、イベント、リアルタイム分析を含む大量のタイムスタンプデータを扱うあらゆるものに適しています。
  • Grafana - はオープンソースのデータ可視化およびモニタリングスイートです。Graphite、ElasticSearch、InfluxDBなどのさまざまな入力プラグインをサポートしています。美しいダッシュボードとメトリクス分析を提供し、あらゆる種類のシステムメトリクスやパフォーマンスデータを可視化および監視することができます。

このチュートリアルでは、単一のRocky Linux 8ベースのサーバーにTIGスタックをインストールおよび構成する方法を学びます。

前提条件

    Rocky Linux 8を実行しているサーバー。

    ルート権限を持つ非sudoユーザー。

    SELinuxが無効です。

    すべてが最新であることを確認してください。

    sudo dnf update
    

ステップ1 - ファイアウォールを設定する

最初のステップはファイアウォールを設定することです。Rocky LinuxにはFirewalldファイアウォールが付属しています。

ファイアウォールが実行中かどうか確認してください。

sudo firewall-cmd --state

次の出力を得るべきです。

running

現在許可されているサービス/ポートを確認してください。

sudo firewall-cmd --permanent --list-services

次の出力を表示する必要があります。

cockpit dhcpv6-client ssh

InfluxDBを実行するために8086ポートを許可し、Grafanaサーバーを実行するために3000ポートを許可します。

sudo firewall-cmd --permanent --add-port=8086/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp

ファイアウォールを再読み込みしてください。

sudo systemctl reload firewalld

ステップ 2 - InfluxDB をインストールする

InfluxDBをインストールするには、まずそのためのリポジトリファイルを作成する必要があります。

influxdb.repoファイルを作成し、編集のために開いてください。

sudo nano /etc/yum.repos.d/influxdb.repo

そのコードをそこに貼り付けてください。

[influxdb]
name = InfluxDB Repository - RHEL $releasever
baseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stable
enabled = 1
gpgcheck = 1
gpgkey = https://repos.influxdata.com/influxdb.key

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

InfluxDB 1.8.x または 2.0.x をインストールするオプションがあります。ただし、最新バージョンを使用する方が良いです。InfluxDBをインストールしてください。

sudo dnf install influxdb2

InfluxDBサービスを開始し、有効にします。

sudo systemctl enable influxdb
sudo systemctl start influxdb

ステップ3 - InfluxDBデータベースとユーザー資格情報を作成する

Telegrafからデータを保存するには、Influxデータベースとユーザーを設定する必要があります。

InfluxDBには、InfluxDBサーバーとやり取りするためのinfluxという名前のコマンドラインツールが付属しています。influxをmysqlコマンドラインツールと考えてください。

Influxの初期設定を行うために、以下のコマンドを実行してください。

influx setup
> Welcome to InfluxDB 2.0!
? Please type your primary username navjot
? Please type your password ***************
? Please type your password again ***************
? Please type your primary organization name howtoforge
? Please type your primary bucket name tigstack
? Please type your retention period in hours, or 0 for infinite 360
? Setup with these parameters?
  Username:          navjot
  Organization:      howtoforge
  Bucket:            tigstack
  Retention Period:  360h0m0s
 Yes
> Config default has been stored in /home/username/.influxdbv2/configs.
User    Organization    Bucket
navjot  howtoforge      tigstack

初期のユーザー名、パスワード、組織名、データを保存するための主要なバケット名、そしてそのデータの保持期間(時間単位)を設定する必要があります。

この設定は、ブラウザでURL http://<serverIP>:8086/ を開くことで実行することもできます。初期設定を完了したら、URLにログインすることができます。

次のダッシュボードが表示されるはずです。

初期設定プロセスでは、データベース内のすべての組織に対して完全な読み取りおよび書き込みアクセスを持つデフォルトトークンが作成されます。セキュリティのために、新しいトークンが必要です。このトークンは、接続したい組織とバケットのみを接続します。

新しいトークンを作成するには、左のサイドバーからデータオプションをクリックします。次に、トークンセクションをクリックします。

ここでは、初期設定時に作成したデフォルトトークンが表示されます。トークンを生成ボタンをクリックし、読み取り/書き込みトークンオプションを選択して、新しいオーバーレイポップアップを表示してください。

トークンに名前を付け、読み取りおよび書き込みセクションの下に作成したデフォルトバケットを選択してください。

保存をクリックして、トークンの作成を完了してください。新しく作成したトークンの名前をクリックすると、トークンの値が表示されるポップアップが開きます。後で必要になるので、今はそれを保存しておいてください。

これでInfluxDBのインストールと設定が完了しました。次に、Telegrafをインストールする必要があります。

ステップ4 - Telegrafをインストールする

TelegrafとInfluxDBは同じリポジトリを共有しています。つまり、Telegrafを直接インストールすることができます。

sudo dnf install telegraf

Telegrafサービスを有効にして開始します。

sudo systemctl enable telegraf
sudo systemctl start telegraf

Telegrafはプラグイン駆動型エージェントであり、4種類のプラグインがあります:

  1. 入力プラグインはメトリックを収集します。
  2. プロセッサプラグインは、メトリックを変換、装飾、およびフィルタリングします。
  3. アグリゲータープラグインはメトリクスを作成および集約します。
  4. 出力プラグインは、メトリクスが送信される宛先を定義します。これにはInfluxDBが含まれます。

Telegrafは、すべてのプラグインの設定をファイル/etc/telegraf/telegraf.confに保存します。最初のステップは、influxdb_v2出力プラグインを有効にして、TelegrafをInfluxDBに接続することです。ファイル/etc/telegraf/telegraf.confを編集のために開いてください。

sudo nano /etc/telegraf/telegraf.conf

行[[outputs.influxdb_v2]]を見つけ、前の#を取り除いてコメントを解除してください。その下のコードを次のように編集してください。

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "$INFLUX_TOKEN"
  organization = "howtoforge"
  bucket = "tigstack"

上記のコードの$INFLUX_TOKEN変数の位置に、前に保存したInfluxDBトークンの値を貼り付けてください。

INPUT PLUGINSという行を検索すると、デフォルトで有効になっている以下の入力プラグインが表示されます。

Read metrics about cpu usage
[[inputs.cpu]]
  ## Whether to report per-cpu stats or not
  percpu = true
  ## Whether to report total system cpu stats or not
  totalcpu = true
  ## If true, collect raw CPU time metrics
  collect_cpu_time = false
  ## If true, compute and report the sum of all non-idle CPU states
  report_active = false

Read metrics about disk usage by mount point
[[inputs.disk]]
  ## By default stats will be gathered for all mount points.
  ## Set mount_points will restrict the stats to only the specified mount points.
  # mount_points = ["/"]

  ## Ignore mount points by filesystem type.
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]
....
....

Get kernel statistics from /proc/stat
[[inputs.kernel]]
  # no configuration


Read metrics about memory usage
[[inputs.mem]]
  # no configuration
  
Get the number of processes and group them by status
[[inputs.processes]]
  # no configuration


Read metrics about swap memory usage
[[inputs.swap]]
  # no configuration


Read metrics about system load & uptime
[[inputs.system]]
  ## Uncomment to remove deprecated metrics.

必要に応じて、Apache Server、Dockerコンテナ、Elasticsearch、iptablesファイアウォール、Kubernetes、Memcached、MongoDB、MySQL、Nginx、PHP-fpm、Postfix、RabbitMQ、Redis、Varnish、Wireguard、PostgreSQLなど、追加の入力プラグインを構成できます。

完了したら、Ctrl + Xを押してファイルを保存し、求められたときにYを入力してください。

変更を適用し終えたら、Telegrafサービスを再起動してください。

sudo systemctl restart telegraf

ステップ5 - Telegrafの統計がInfluxDBに保存されているか確認する

さらに進む前に、Telegrafの統計が正しく収集され、InfluxDBに取り込まれているかを確認する必要があります。ブラウザでInfluxDB UIを開き、データ >> バケット >> tigstackに移動してください。次のページが表示されるはずです。

バケット名をクリックし、次に_measurementフィルター内の値の1つをクリックし、他の値が表示されるたびにクリックし続けてください。完了したら、送信ボタンをクリックしてください。上部にグラフが表示されるはずです。

これにより、データが正しく渡されていることが確認できるはずです。

ステップ6 - Grafanaをインストールする

/etc/yum.repos.d/grafana.repoファイルを作成して開きます。

sudo nano /etc/yum.repos.d/grafana.repo

そのコードをそこに貼り付けてください。

[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

Grafanaをインストールします。

sudo dnf install grafana

Grafanaサービスを開始し、有効にします。

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

ステップ7 - Grafanaデータソースを設定する

ブラウザでURL http://:3000 を開くと、以下のGrafanaログインページが表示されるはずです。

デフォルトのユーザー名adminとパスワードadminでログインします。次に、新しいデフォルトのパスワードを設定する必要があります。

以下のGrafanaホームページが表示されます。最初のデータソースを追加ボタンをクリックしてください。

InfluxDBボタンをクリックしてください。

次のページで、ドロップダウンメニューからFluxをクエリ言語として選択します。InfluxQLをクエリ言語として使用することもできますが、デフォルトではInfluxDB v1.xのみをサポートしているため、設定がより複雑です。FluxはInfluxDB v2.xをサポートしており、設定と構成が簡単です。

次の値を入力してください。

URL: http://localhost:8086 アクセス: サーバー 基本認証の詳細 ユーザー: navjot パスワード:

InfluxDBの詳細 組織: howtoforge トークン:

保存してテスト ボタンをクリックすると、設定が成功したことを確認するメッセージが表示されるはずです。

ステップ8 - Grafanaダッシュボードを設定する

次のステップは、Grafanaダッシュボードを設定することです。+マークをクリックしてダッシュボードを選択すると、ダッシュボード作成画面が開きます。

次のページで、空のパネルを追加ボタンをクリックして、次の画面を表示します。

次のコードをクエリエディタに貼り付けてください。これ

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "cpu")
  |> filter(fn: (r) => r["_field"] == "usage_idle")
  |> filter(fn: (r) => r["cpu"] == "cpu-total")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value * -1.0 + 100.0 }))
  |> toFloat()
  |> yield(name: "mean")

上で使用したバケット名を使用してください。そして、ファイル/etc/hostnameから取得できるホスト名を使用してください。

上記のコードはCPU使用率を計算し、それに関するグラフを生成します。パネルにタイトルを付けてください。クエリインスペクタボタンをクリックして、クエリが正常に動作しているかどうかを確認します。結果に満足したら、適用ボタンをクリックして進んでください。

軸セクションの右側にある軸フィールドのラベルを使用して、軸に名前を付けることもできます。

適用ボタンをクリックしてパネルを保存します。

ダッシュボードを保存 ボタンをクリックしてください、完了したら。

ダッシュボードに名前を付けて、保存をクリックして完了します。

ダッシュボードが開くので、次に パネルを追加 ボタンをクリックして、別のパネルを作成します。

RAM使用量のために別のパネルを作成してプロセスを繰り返してください。

from(bucket: "NAMEOFYOUBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "mem")
  |> filter(fn: (r) => r["_field"] == "used_percent")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> yield(name: "mean")

そして、HDD使用量を表示するために次のコードを使用してください。

from(bucket: "NAMEOFYOURBUCKET")
  |> range(start: v.timeRangeStart, stop: v.timeRangeStop)
  |> filter(fn: (r) => r["_measurement"] == "disk")
  |> filter(fn: (r) => r["_field"] == "used")
  |> filter(fn: (r) => r["path"] == "/")
  |> filter(fn: (r) => r["host"] == "NAMEOFYOURHOST")
  |> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
  |> map(fn: (r) => ({ r with _value: r._value / 1000000.0 }))
  |> toFloat()  
  |> yield(name: "mean")

無限の数のパネルを作成することができます。

上記のコードはFluxスクリプティング言語に基づいています。幸運なことに、クエリを書くためにその言語を学ぶ必要はありません。InfluxDBのURLからクエリを生成できます。ただし、言語を学ぶことはクエリの最適化に役立つ可能性があります。

InfluxDBのダッシュボードに戻り、クエリを取得するためにExploreページを開く必要があります。

バケット名をクリックし、次に<_measurement>フィルター内の値の1つをクリックし、他の値が表示されるたびにクリックし続けます。完了したら、スクリプトエディタボタンをクリックすると、次のページが表示されます。グラフも更新されるはずです。

表示されたクエリをコピーし、Grafanaダッシュボードでそれを使用してグラフを作成できます。

ステップ9 - アラートと通知を設定する

モニターを設定する主な目的は、値が特定の閾値を超えたときにタイムリーにアラートを受け取ることです。

最初のステップは、アラートを受け取りたい宛先を設定することです。メール、Slack、Kafka、Google Hangouts Chat、Microsoft Teams、Telegramなどを通じて通知を受け取ることができます。

チュートリアルのためにメール通知を有効にします。メール通知を設定するには、まずSMTPサービスを構成する必要があります。SMTPを構成するには、/etc/grafana/grafana.iniファイルを開いてください。

sudo nano /etc/grafana/grafana.ini

次の行 [smtp] を見つけてください。次の行のコメントを解除し、カスタムSMTPサーバーの値を入力します。

[smtp]
enabled = true
host = email-smtp.us-west-2.amazonaws.com:587
user = YOURUSERNAME
If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = YOURUSERPASSWORD
;cert_file =
;key_file =
;skip_verify = false
from_address = [email 
from_name = HowtoForge Grafana
EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
SMTP startTLS policy (defaults to 'OpportunisticStartTLS')
;startTLS_policy = NoStartTLS

Ctrl + X を押してファイルを保存し、促されたらYと入力します。

設定を適用するためにGrafanaサーバーを再起動してください。

sudo systemctl restart grafana-server

Grafanaのページを開き、アラートアイコンをクリックし、通知チャネルをクリックしてください。

チャンネルを追加ボタンをクリックしてください。

メール通知チャネルを設定するための詳細を入力してください。

テストをクリックして、メール設定が機能しているか確認してください。終了したら保存をクリックします。

通知チャネルを設定したので、これらのメールを受信するタイミングでのアラートを設定する必要があります。アラートを設定するには、ダッシュボードパネルに戻る必要があります。

ダッシュボードを開くには、ダッシュボード >> 管理をクリックしてください。

先程作成したダッシュボードをクリックすると、さまざまなパネルがあるホームページが表示されます。パネルを編集するには、パネルの名前をクリックし、ドロップダウンメニューがポップアップします。編集リンクをクリックして続行してください。

アラートパネルをクリックし、アラートを作成ボタンをクリックして新しいアラートを設定してください。

これで、Grafanaがアラートを送信する条件を設定できるようになりました。

ルール

  • 名前 - アラートの説明的な名前を入力してください
  • すべてを評価する - Grafanaがアラートを評価する頻度を指定します。これを評価間隔とも呼びます。ここで任意の値を設定できます。
  • ため - アラートがトリガーされる前に、クエリがしきい値をどれくらいの時間違反する必要があるかを指定してください。必要に応じて時間を変更してください。

条件

Grafanaは、アラートを発動するタイミングを判断するために、次の形式のクエリを使用します。

avg() OF query(A, 15m, now) IS BELOW 14
  • avg()は、各系列の値をしきい値に対して比較可能な値にどのように減らすかを制御します。関数名をクリックすると、avg()、min()、max()、sum()、count()などの異なる関数を選択できます。
  • query(A, 15m, now) カッコ内の文字は、Metrics タブから実行するクエリを定義します。次の2つのパラメータは時間範囲を定義します。15m, now は15分前から現在までを意味します。

    14未満 は閾値の種類とその閾値の値を定義します。IS BELOWをクリックすると、別の閾値の種類を選択できます。

最初の条件の下にある+ボタンをクリックすることで、2つ目の条件を追加できます。現在、複数の条件の間ではANDとOR演算子のみが使用可能です。

データなしおよびエラーハンドリング

Grafanaがデータを返さないか、null値のみを返すクエリをどのように処理するかを、以下の条件を使用して設定できます。

  1. データなし - ルールの状態を NoData に設定します
  2. アラート中 - ルールの状態をアラート中に設定する
  3. 最後の状態を保持 - 現在のルールの状態を保持します、何であっても
  4. オーケー - アラートルールの状態をオーケーに設定します。つまり、物事が正常であってもアラートが届くことになります。

Grafanaに実行エラーやタイムアウトエラーの処理方法を指示できます。

  1. アラート - ルールの状態をアラートに設定します
  2. 最後の状態を保持 - 現在のルールの状態を保持します、何であっても

通知

アラートルール通知を、ルールに関する詳細なメッセージと共に指定できます。メッセージに含めたい情報や関連する内容を自由に追加できます。

  1. 送信先 - あらかじめ設定したアラートを送信する通知チャネルを選択してください。
  2. メッセージ - 警告と一緒に送信するテキストメッセージを入力してください。
  3. タグ - 通知に含めるタグ(キー/値)のリストを指定します。すべての通知チャネル(メールを含む)でサポートされているわけではないので、空のままにしておくこともできます。通常、メール内の変数とその値を送信するために使用されます。

完了したら、ルールをテストするボタンをクリックして、すべてが正常に動作しているかを確認してください。アラートの追加を完了するには、右上の適用ボタンをクリックしてください。

あなたは今、メールでアラートを受け取るようになるはずです。

結論

これで、Rocky Linux 8ベースのサーバーにTIGスタックをインストールおよび構成するためのチュートリアルが終了します。質問がある場合は、以下のコメントに投稿してください。

関連記事: