このトピックでは、Grafana を使用して Simple Log Service (SLS) によって収集された NGINX ログを表示および分析する方法について説明します。
SLS は、ダッシュボードのエクスポートと Grafana へのインポートをサポートしています。詳細については、「Grafana ダッシュボードのエクスポートと SLS へのインポート」をご参照ください。
前提条件
NGINX ログが収集されていること。詳細については、「NGINX 設定モードでのテキストログの収集」をご参照ください。
インデックス機能が有効になっており、インデックスが作成されていること。詳細については、「NGINX アクセスログの収集と分析」をご参照ください。
aliyun-log-grafana-datasource-plugin ソフトウェアパッケージがダウンロードされていること。わかりやすくするために、このトピックではこのプラグインを SLS プラグインとも呼びます。
ダウンロードコマンドは
wget https://github.com/aliyun/aliyun-log-grafana-datasource-plugin/archive/refs/heads/master.zipです。説明このトピックでは、aliyun-log-grafana-datasource-plugin V2.36 を使用します。
Grafana がインストールされていること。詳細については、Grafana ドキュメントをご参照ください。
説明このトピックでは、Grafana 11.4.0 を使用します。
お使いのコンピューターに Grafana をインストールする場合は、ブラウザの設定でポート 3000 を有効にする必要があります。
円グラフを使用する場合は、次のコマンドを実行して Pie Chart プラグインをインストールする必要があります。
grafana-cli plugins install grafana-piechart-panel
Grafana と aliyun-log-grafana-datasource-plugin のバージョンの互換性
次の表に、Grafana と aliyun-log-grafana-datasource-plugin のバージョンの互換性を示します。
Grafana | aliyun-log-grafana-datasource-plugin |
8.0.0 以降 | |
8.0.0 より前 |
注意事項
セキュリティ上の理由から、セキュリティトークンサービス (STS) を使用してリダイレクトを設定する場合、次の 2 つの条件を満たす必要があります。
データソースの AccessKey に関連付けられているユーザーには、
AliyunRAMReadOnlyAccessおよびAliyunSTSAssumeRoleAccessアクセスポリシーが必要です。このユーザーには、CreateTicket API を呼び出す権限と、SLS に関連する権限も必要です。データソースの roleArn で指定されたロールには、
AliyunLogReadOnlyAccessアクセスポリシーのみがアタッチされている必要があります。原則の詳細については、「コンソールページの埋め込みとログデータの共有」をご参照ください。
ログイン不要のアクセスを設定する場合は、データソースが一般に共有されている Grafana ダッシュボードに使用されているかどうかを確認してください。これらのダッシュボードへのパブリックアクセスは、トラフィックコストを増加させ、ログコンテンツを公開する可能性があります。
システムポリシーの詳細については、「SLS のシステムポリシー」をご参照ください。
ステップ 1:SLS プラグインのインストール
次のいずれかのコマンドを実行して、aliyun-log-grafana-datasource-plugin ソフトウェアパッケージを Grafana のプラグインディレクトリに解凍します。
Grafana が Yellowdog Updater Modified (YUM) リポジトリまたは RedHat Package Manager (RPM) パッケージを使用してインストールされている場合は、次のコマンドを実行します。
unzip aliyun-log-grafana-datasource-plugin-master.zip -d /var/lib/grafana/pluginsGrafana が .tar.gz ファイルを使用してインストールされている場合は、次のコマンドを実行します。
{PATH_TO} は、Grafana の設定ファイルのインストールパスを指定します。
unzip aliyun-log-grafana-datasource-plugin-master.zip -d {PATH_TO}/grafana-11.4.0/data/plugins
Grafana の設定ファイルを変更します。
設定ファイルを開きます。
Grafana が YUM リポジトリまたは RPM パッケージを使用してインストールされている場合は、/etc/grafana/grafana.ini ファイルを開きます。
Grafana が .tar.gz ファイルを使用してインストールされている場合は、{PATH_TO}/grafana-11.4.0/conf/defaults.ini ファイルを開きます。
設定ファイルで [plugins] を見つけ、allow_loading_unsigned_plugins パラメーターを設定します。
allow_loading_unsigned_plugins = aliyun-log-service-datasource
Grafana を再起動します。
kill コマンドを実行して Grafana プロセスを終了させます。
次のいずれかのコマンドを実行して Grafana を起動します。
Grafana が YUM リポジトリまたは RPM パッケージを使用してインストールされている場合は、次のコマンドを実行します。
systemctl restart grafana-serverGrafana が .tar.gz ファイルを使用してインストールされている場合は、次のコマンドを実行します。
./bin/grafana-server web
ステップ 2:Grafana のデータソースの追加
Grafana にログインします。
左側のナビゲーションウィンドウで、 を選択します。
[データソース] タブで、[データソースの追加] をクリックします。
[データソースの追加] ページで、log-service-datasource を検索します。データソースの追加ページに log-service-datasource が表示されたら、[log-service-datasource] をクリックします。

[aliyun-log-service-datasource] ページで、パラメーターを設定します。

次の表に、必須パラメーターを示します。
パラメーター
説明
エンドポイント
SLS プロジェクトのエンドポイント。例:
http://cn-qingdao.log.aliyuncs.com。ビジネス要件に基づいてエンドポイントを入力します。詳細については、「エンドポイント」をご参照ください。プロジェクト
SLS プロジェクトの名前。
AccessKeyID
AccessKey ID はユーザーを識別するために使用されます。詳細については、「AccessKey ペア」をご参照ください。
最小権限の原則に基づき、RAM ユーザーには必要な権限のみを付与することを推奨します。RAM ユーザーに権限を付与する方法の詳細については、「RAM ユーザーの作成と Simple Log Service へのアクセスの承認」および「カスタムポリシーを使用して RAM ユーザーに権限を付与する例」をご参照ください。
AccessKeySecret
AccessKey Secret は、署名文字列を暗号化および検証するために使用されます。AccessKey Secret は機密情報として扱ってください。
次の表に、オプションのパラメーターを示します。
パラメーター
説明
名前
データソースの名前。デフォルト値:aliyun-log-service-datasource。
デフォルト
デフォルトでは、このスイッチはオンになっています。
デフォルト Logstore
Logstore を指定しない場合は、指定した AccessKey ペアに、指定したプロジェクトに対する ListProject 権限があることを確認してください。
RoleArn
STS ベースのリダイレクトに指定された RAM ロールの ARN。
HTTP ヘッダー
カスタムヘッダーを指定できます。このパラメーターは、データソースのタイプが MetricStore (PromQL) の場合にのみ有効です。詳細については、「クエリの高速化」トピックの FormValue パラメーターのフィールドをご参照ください。Headers パラメーターのフィールドは次のとおりです。
x-sls-parallel-enable:同時コンピューティングを有効にするかどうかを指定します。デフォルトでは、同時コンピューティングは無効になっています。
x-sls-parallel-time-piece-interval:クエリを分割する時間間隔。単位:秒。有効値:[3600, 86400 × 30]。デフォルト値:21600 (6 時間に相当)。
x-sls-parallel-time-piece-count:指定した時間間隔で分割した後に取得できるサブクエリの数。有効値:1~16。デフォルト値:8。
x-sls-parallel-count:グローバルな同時タスクの数。有効値:2~64。デフォルト値:8。
x-sls-parallel-count-per-host:サーバー上の同時タスクの数。有効値:1~8。デフォルト値:2。
x-sls-global-cache-enable:グローバルキャッシュを有効にするかどうかを指定します。デフォルトでは、グローバルキャッシュは無効になっています。
リージョン
署名バージョン 4 (V4) がサポートされており、より高いセキュリティを提供します。
設定が完了したら、[保存 & テスト] をクリックします。
ステップ 3:ダッシュボードの追加
以下の手順に従って、Grafana のダッシュボードを追加します。
左側のナビゲーションウィンドウで、[ダッシュボード] をクリックします。
[ダッシュボード] ページで、[+ ダッシュボードの作成] をクリックし、次に [+ 可視化の追加] をクリックします。

[データソースの選択] ページで、[データソース] ドロップダウンリストから [aliyun-log-service-datasource] を選択します。
ビジネス要件に基づいてチャートを追加します。

チャートを追加する際に設定する必要があるパラメーターは次のとおりです。
[データソースタイプ]:データソースのタイプは、構文とストアタイプによって異なります。構文には SQL と PromQL が含まれます。サポートされているデータソースタイプには、[ALL(SQL)]、[Logstore(SQL)]、[MetricStore(SQL)]、および [MetricStore(PromQL)] があります。
SQL 構文を使用して、Logstore 内のデータをクエリおよび分析できます。詳細については、「ログのクエリと分析の概要」をご参照ください。
SQL 構文と PromQL 構文を使用して、MetricStore 内のデータをクエリおよび分析できます。詳細については、「ログのクエリと分析の概要」をご参照ください。
[MetricStore(PromQL)] タイプのデータソースのカスタムヘッダーを、データソースの設定ページで追加できます。
[Logstore]:クエリ対象の Logstore の名前。
[クエリ]:クエリ文。例:
* | select count(*) as c, __time__-__time__%60 as t group by tycol:
None[xcol]:ドロップダウンリストから [TimeSeries / Custom] を選択し、
tと入力します。[goto SLS]:SLS コンソールに移動するためのリンク。
[goto SLS] を [Explore] および [Dashboards] ページでクリックすると、ビジネス要件に基づいてコンソール間でデータを比較するために SLS コンソールに移動できます。SLS コンソールでは、より強力な機能とより柔軟なログ検索を使用できます。SLS コンソールに移動すると、Grafana で指定したクエリと時間の情報が SLS コンソールに表示されます。SLS コンソールで情報を指定する必要はありません。
このリダイレクトには追加の設定は必要ありません。ブラウザで SLS コンソールにログインしていることを確認してください。そうでない場合は、SLS コンソールのログインページに移動します。
説明この機能は、SLS プラグイン V2.30 以降を使用している場合に利用できます。
[パネルオプション] セクションで、[タイトル] パラメーターを設定します。次に、ページの右上隅にある [ダッシュボードの保存] をクリックします。表示されるダイアログボックスで、[保存] をクリックします。

テンプレート変数の設定
Grafana でテンプレート変数を設定すると、同じチャートで異なる変数値を選択して、異なる結果を表示できます。
時間間隔のテンプレート変数の設定
[新しいダッシュボード] ページの右上隅で、 を選択します。
[変数]をクリックします。
[新しい変数] をクリックします。
テンプレート変数のパラメーターを設定し、[追加] をクリックします。
次の表にパラメーターを示します。
パラメーター
説明
名前
テンプレート変数の名前。例:myinterval。クエリ条件でテンプレート変数を使用する場合は、テンプレート変数の名前の前にドル記号 ($$) を 2 つ追加する必要があります。例:
$$myinterval。タイプ
[間隔] を選択します。
ラベル
[時間間隔] を入力してください。
値
[1m,10m,30m,1h,6h,12h,1d,7d,14d,30d] と入力します。
自動オプション
[自動オプション] をオンにします。他のパラメーターはデフォルト値のままにします。
設定効果を表示します。

ドメインのテンプレート変数の設定
[変数] ページで、[新規] をクリックします。
テンプレート変数のパラメーターを設定し、[追加] をクリックします。次の表にパラメーターを示します。
パラメーター
説明
名前
テンプレート変数の名前。例:hostname。クエリ条件でテンプレート変数を使用する場合は、テンプレート変数の名前の前にドル記号 ($) を追加する必要があります。例:
$hostname。タイプ
[カスタム] を選択します。
ラベル
ドメインの名前を入力します。
カスタムオプション
*,example.com,example.org,example.netと入力します。すべてのドメインへのアクセスに関する情報を表示できます。また、example.com、example.org、またはexample.netドメインへのアクセスに関する情報も表示できます。選択オプション
このパラメーターはデフォルト値のままにします。
設定効果を表示します。

Logstore リストのテンプレート変数の設定
[変数] ページで、[変数タイプの選択] パラメーターを [カスタム] に設定します。テンプレート変数の名前は一意の識別子です。[名前] パラメーターには logstore を含む値を指定する必要があります。文字列 logstore は大文字と小文字を区別しません。[カスタムオプション] パラメーターにはオプションの変数を指定し、変数をコンマ (,) で区切る必要があります。

[Logstore リスト] のドロップダウンリストから指定したテンプレート変数のカスタム名を選択し、ダッシュボードをリフレッシュして最新の結果を取得します。

標準的なチャートの作成方法の概要
単一値チャート (Stat および Gauge チャート)
xcol:stat
ycol:<数値列>, <数値列>
ycol に数値以外の列を指定した場合、その列には 0 が表示されます。
例 1
チャートタイプ:[Stat]
[xcol]:
stat[ycol]:
PV, deltaPercent[クエリ]:
* | select diff[1] as "PV", round((diff[1] - diff[2])/diff[2] * 100, 2) as deltaPercent from (select compare("PV", 86400) as diff from (select count(*) as "PV" from log))
例 2
チャートタイプ:Gauge
[xcol]:
stat[ycol]:
c[クエリ]:
* | select count(distinct labels['hostname']) as c from (select promql_query('${metricName}{cluster =~ "${cluster}"}') from metrics ) limit 100000
円グラフ (Pie)
xcol:pie
ycol:<集約列>, <集約列>
例 1
チャートタイプ:Pie
[xcol]:
pie[ycol]:
request_method, c[クエリ]:
request_method: "$method" | select count(*) as c, request_method group by request_method
例 2
チャートタイプ:Pie
[xcol]:
pie[ycol]:
http_user_agent, pv[クエリ]:
* | select count(1) as pv, case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end as http_user_agent group by case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end order by pv desc limit 10
その他のシナリオ
Stat チャートの作成ルールは円グラフにも適用でき、データも期待どおりに表示されます。
チャートタイプ:Pie
xcol:
stat[ycol]:
hostNameNum, ipNum[クエリ]:
* | select count(distinct labels['hostname']) as hostNameNum, count(distinct labels['ip']) + 20 as ipNum from (select promql_query('${metricName}{cluster =~ ".*"}') from metrics ) limit 100000
時系列グラフ (Time series)
xcol:<時間列>
ycol:ログ作成の場合は <数値列> [, <数値列>, ...]、Metricstore またはログ集約作成の場合は <ラベル / 集約列>#:#<数値列>
例 1
チャートタイプ:時系列
xcol:
time[ycol]:
pv, uv[クエリ]:
* | select __time__ - __time__ % $${myinterval} as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000
例 2
チャートタイプ:時系列
[xcol]:
timeY列:
labels#:#value[クエリ]:
* | select time, * from (select promql_query_range('${metricName}') from metrics) limit 1000
例 3
SQL 文を使用して、ビジネス要件に基づいて時系列データのラベルを表示できます。
チャートタイプ:時系列
[xcol]:
time[ycol]:
customLabelsExtract#:#value[クエリ]:
* | select concat(labels['ip'], ' -> ', labels['cluster']) as customLabelsExtract, value from (select promql_query_range('${metricName}') from metrics) limit 1000
棒グラフ (Bar)
xcol:bar
ycol:<集約列>, <数値列> [, <数値列>, ...]
例 1
チャートタイプ:棒
[xcol]:
bar[ycol]:
host, pv, pv2, uv[クエリ]:
* | select host, COUNT(*)+10 as pv, COUNT(*)+20 as pv2, approx_distinct(remote_addr) as uv GROUP BY host ORDER BY uv desc LIMIT 5
テーブル (Table)
フィールド値がナノ秒単位で正確な場合、時間フィールドの値をナノ秒単位でソートできます。
totalLogs パラメーターを変更できます。totalLogs パラメーターは、クエリするログの総数を指定します。デフォルト値:100。最小値:1。最大値:5000。このパラメーターは、検索文でのみ有効です。
xcol:<None>
ycol:<None> または <表示列> [, <表示列>, ...]
例 1
チャートタイプ:テーブル
xcol:
Table/Logycol:
<None>クエリ:
* | select __time__ - __time__ % 60 as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000
ログ (Logs)
xcol:<None>
ycol:<None>
例
チャートタイプ:ログ
xcol:<None>
ycol:<None>
クエリ:host: www.vt.mock.com

トレース (Traces)
チャートタイプ:トレース
xcol: trace
ycol:なし
クエリ: traceID: "f88271003ab7d29ffee1eb8b68c58237"

この例では、Logstore を使用してトレースデータを収集します。Logstore を使用してトレースデータを収集する前に、SLS の Trace アプリケーションを有効にする必要があります。OpenTelemetry を使用して、ネイティブモードでトレースデータを SLS に収集できます。また、他のトレースシステムを使用してトレースデータを SLS に収集することもできます。詳細については、「概要」をご参照ください。
バージョン 10.0 より後の Grafana は、トレースデータ内のスパンをフィルタリングする機能をサポートしています。Grafana 10.0 以前を使用している場合は、クエリ文でカスタムスパンフィルタリングを設定できます。例:
traceID: "f88271003ab7d29ffee1eb8b68c58237" and resource.deployment.environment : "dev" and service : "web_request" and duration > 10マップ (Map)
xcol:map
ycol:<国列>, <地理的位置列>, <数値列>
例
チャートタイプ:GeoMap
[xcol]:map
[ycol]:country, geo, pv
[クエリ]:* | select count(1) as pv ,geohash(ip_to_geo(arbitrary(remote_addr))) as geo,ip_to_country(remote_addr) as country from log group by country having geo <>'' limit 1000

よくある質問
Grafana のログはどこに保存されますか?
Grafana のログは次のディレクトリに保存されます。
macOS:/usr/local/var/log/grafana
Linux:/var/log/grafana
ログに [aliyun-log-plugin_linux_amd64: permission denied] と表示された場合の対処方法
プラグインディレクトリの dist/aliyun-log-plugin_linux_amd64 ディレクトリに実行 (EXECUTE) 権限を付与します。

