tencent cloud

Cloud Log Service

CLSログをMySQLへ消費する

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-12 15:06:44
AI翻訳

操作シナリオ

本稿では、Flinkを使用してCLS内のNginxログデータをリアルタイムに消費・分析し、Web側のPV/UV値を計算し、結果データを自社構築のMySQLデータベースにリアルタイムに書き込む方法について詳しく説明します。
文中で使用するコンポーネント/アプリケーションおよびバージョンは以下の通りです:
技術コンポーネント
バージョン
Nginx
1.22
CLS
-
Java OpenJDK
openjdk version 1.8.0_452
Scala
2.11.12
Flink
1.14.5
MySQL
5.7

操作手順

ステップ1:Tencent Nginxゲートウェイをインストールする

1. Tencent CloudホストCVMを購入するには、CVMインスタンスの作成をご参照ください。
2. Nginx 1.22バージョンをインストールします。

ステップ2:NginxログをTencent Cloud CLSログサービスへ収集する

2. CLSログサービスは、端末にLoglistenerをインストールします。Loglistenerは、オープンソースコンポーネントのBeatsに類似しており、ログデータを収集するためのAgentです。
3. ログトピックでインデックスを有効にすると、Nginxのログデータを正常に照会できます。
4. 最後に、CLSコンソールでKafka消費を有効にします。Kafkaプロトコル消費機能を使用すると、1つのログトピックを1つのKafka Topicとして消費できます。本稿では、ストリームコンピューティングフレームワークFlinkを使用して、Nginxログデータをリアルタイムに消費し、リアルタイム計算の結果をMySQLに書き込みます。

ステップ3:MySQLデータベースの構築

1. MySQLインスタンスを作成し、データベースにログインします。
mysql -h 172.16.1.1 -uroot -p
2. 使用するDBとテーブルを新規作成します。例のDB名はflink_nginx、テーブル名はmysql_destです。
create database if not exists flink_nginx;
use flink_nginx;
create table if not exists mysql_dest(
ts timestamp,
pv bigint,
uv bigint
);

ステップ4:Flinkのデプロイ

1. Flinkをデプロイする際は、以下のバージョンを使用することをお勧めします。そうしないと、インストールが失敗する可能性があります。
Tencent CloudホストCVMを購入します。リソース構成は最小8C16Gです。
JDK v8.0.0をインストールします。
#openjdkをダウンロードします。
wget https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
#ダウンロードディレクトリに移動し、インストールコマンドを実行します。
sudo rpm -ivh amazon-corretto-8-x64-linux-jdk.rpm
# バージョンを確認します。
java -version
2. Flink 1.14.5をインストールし、SQL画面に入ります。Apache Flink公式サイトからFlinkバイナリコードパッケージをダウンロードしてインストールを開始します。
# Flinkバイナリパッケージを解凍します。
tar -xf flink-1.14.5-bin-scala_2.11.tgz
cd flink-1.14.5

# kafka関連の依存関係をダウンロードします。
wget https://repo1.maven.org/maven2/org/apache/flink/flink-connector-kafka_2.11/1.14.5/flink-connector-kafka_2.11-1.14.5.jar
mv flink-connector-kafka_2.11-1.14.5.jar lib
wget https://repo1.maven.org/maven2/org/apache/kafka/kafka-clients/2.4.1/kafka-clients-2.4.1.jar
mv kafka-clients-2.4.1.jar lib

# MySQL関連の依存関係をダウンロードします。
wget https://repo1.maven.org/maven2/org/apache/flink/flink-connector-jdbc_2.11/1.14.5/flink-connector-jdbc_2.11-1.14.5.jar
mv flink-connector-jdbc_2.11-1.14.5.jar lib
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.11/mysql-connector-java-8.0.11.jar
mv mysql-connector-java-8.0.11.jar lib
wget https://repo1.maven.org/maven2/org/apache/flink/flink-table-common/1.14.5/flink-table-common-1.14.5.jar
mv flink-table-common-1.14.5.jar lib

# Flinkを起動します。
bin/start-cluster.sh
bin/sql-client.sh
3. 以下の画面が表示された場合、インストールが成功したことを示します。



Webポートは8081で、Flink Dashboardを確認できます。




ステップ5:Flinkを使用してCLSログデータを消費する

1. SQL Client画面で、以下のSQLを実行します:
-- CLSログトピックデータを消費し、データソーステーブルを作成します。
CREATE TABLE `nginx_source`
(
`}
`time_local` STRING, -- ログ内フィールド、サーバーローカル時間
`}
`}
`remote_addr` STRING, -- ログ内フィールド、クライアントIPアドレス
`protocol` STRING, -- ログ内フィールド、プロトコルタイプ
`status` INT, -- ログ内フィールド、HTTPリクエストステータスコード
`url` STRING, -- ログ内フィールド、URLアドレス
`http_referer` STRING, -- ログ内フィールド、このウェブページがどのページからリンクされてきたか
`http_user_agent` STRING, -- ログ内フィールド、クライアントブラウザ情報
`method` STRING, -- ログ内フィールド、HTTPリクエストメソッド
`partition_id` BIGINT METADATA FROM 'partition' VIRTUAL, -- CLSログトピックパーティション
`ts` AS PROCTIME()
) WITH (
'connector' = 'kafka',--CLSログトピックをKafka Topicとして消費します。
'topic' = 'YourTopic', -- CLS Kafkaプロトコルでコンソールから提供されるトピック名です。例えば12345-633a268c-XXXX-4a4c-XXXX-7a9a1a7baXXXXです。
'properties.bootstrap.servers' = 'kafkaconsumer-ap-guangzhou.cls.tencentcs.com:9096', -- CLS Kafkaプロトコル消費コンソールで提供されるサービスアドレスです。例では広州リージョンの外部ネットワーク消費アドレスです。実際の状況に応じて入力してください。
'properties.group.id' = 'kafka_flink', -- Kafkaコンシューマーグループ名
'scan.startup.mode' = 'earliest-offset',
'format' = 'json',
'json.fail-on-missing-field' = 'false',
'json.ignore-parse-errors' = 'true' ,
'properties.sasl.jaas.config' = 'org.apache.kafka.common.security.plain.PlainLoginModule required username="your username" password="your password";',--ユーザー名はログトピックが属するログセットIDです。例えばca5cXXXX-dd2e-4ac0-af12-92d4b677d2c6です。パスワードはユーザーのsecretid#secrectkeyを組み合わせた文字列です。例えばAKID********************************#XXXXuXtymIXT0Lacです。#を失わないように注意してください。サブアカウントキーの使用を推奨します。メインアカウントがサブアカウントに権限を付与する際は、最小権限の原則に従ってください。つまり、サブアカウントのアクセスポリシーにおけるaction、resourceはすべて最小範囲に設定し、操作を満たせば十分です。
'properties.security.protocol' = 'SASL_PLAINTEXT',
'properties.sasl.mechanism' = 'PLAIN'
);

--- ターゲットテーブルを作成します。
CREATE TABLE `mysql_dest`
(
`ts` TIMESTAMP,
`pv` BIGINT,
`uv` BIGINT
) WITH (
'connector' = 'jdbc',
'url' = 'jdbc:mysql://11.150.2.1:3306/flink_nginx', -- こちらのタイムゾーン設定に注意してください。
'username'= 'username', -- MYSQLアカウント
'password'= 'password', -- MYSQLパスワード
'table-name' = 'mysql_dest' -- MYSQLテーブル名
);

--- CLSログトピックをクエリし、Nginxログ内のPV、UVに対して集計計算を行い、結果をMYSQLターゲットテーブルに書き込みます。
INSERT INTO mysql_dest (ts,uv,pv)
SELECT TUMBLE_START(ts, INTERVAL '1' MINUTE) start_ts, COUNT(DISTINCT remote_addr) uv,count(*) pv
FROM nginx_source
GROUP BY TUMBLE(ts, INTERVAL '1' MINUTE);
2. Flinkのタスク監視ページでは、Flinkタスクの監視データを確認できます:



3. MySqlデータベースに入ると、PV、UVを計算した結果データがリアルタイムに書き込まれるのを確認できます:




ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック