readonly 設定を有効にした状態で送信します。エージェントにデータを変更させたい場合は Write access をオンにし、オブジェクトを削除させたい場合はさらに Allow DROP and TRUNCATE をオンにします。
前提条件
- CloudThinker から HTTP インターフェース経由で到達可能な ClickHouse サーバー(TLS ありは
8443、なしは8123)。ClickHouse Cloud、セルフホストのクラスタ、Kubernetes 上で Operator が運用するクラスタ、他社のマネージド ClickHouse のいずれでも動作します。CloudThinker が必要とするのはそのポートだけです。 - 専用ユーザーを作成するための管理者アクセス。
- ネイティブ TCP ポート(
9000)は使用しないため、公開する必要はありません。
セットアップ
1
専用ユーザーを作成する
管理者として接続し、CloudThinker ユーザーを作成します:
2
読み取りアクセスを付与する
エージェントに見せるデータベースへの
SELECT と、SHOW を付与します:3
ユーザーを読み取り専用に固定する(推奨)
接続はデフォルトで読み取り専用ですが、設定プロファイルを使うとクライアントに依存せずサーバー側で制限を維持できます:Write access をオンにする予定がある場合はこのステップをスキップしてください。このプロファイルは
READONLY を使用するため、ユーザーは解除できず、CloudThinker のスイッチでも上書きできません。4
システムテーブルへのアクセスを許可する(任意)
テーブルサイズ、パート数、カラムのメタデータは
system から取得されます:5
ネットワークアクセスを設定する
CloudThinker に HTTP インターフェースを開放します:
- ClickHouse Cloud の場合:サービスの Settings → Security にある IP アクセスリストに CloudThinker を追加
- セルフホストの場合:ファイアウォールまたはセキュリティグループで CloudThinker からの
8443(または8123)の受信を許可
6
CloudThinker に接続を追加する
Connections → ClickHouse に移動し、以下を入力します:
- Host:ホスト名のみ。スキームとポートは含めません。例:
abc123.ap-southeast-1.aws.clickhouse.cloud - Port:TLS ありは
8443、なしは8123 - Username:
cloudthinker - Password:上記で設定したパスワード
- Use TLS:ClickHouse Cloud および公開エンドポイントでは
Yes - Verify the TLS certificate:
Yesのままにします。自己署名証明書または内部 CA の証明書の場合のみオフにします - Default database:任意。空欄にするとサーバーのデフォルトを使用
- Write access:エージェントがデータを変更する必要がない限り
Read-onlyのままにします - Allow DROP and TRUNCATE:書き込みアクセスをオンにしたときのみ表示されます。エージェントにオブジェクトを削除させたい場合を除き
Blockedのままにします
SELECT version() を 1 回だけ実行して認証情報を確認し、Connected のメッセージには到達した ClickHouse のバージョン、使用したユーザー名、そして設定した場合はデフォルトデータベースが示されます。それ以外の場合は具体的な理由が返ります。トラブルシューティングを参照してください。接続詳細
必要な権限
最小権限
推奨(フル分析)
system.query_log は「このダッシュボードが遅い」という状態を、原因となっているクエリのランキングに変えるものです。
書き込みアクセス(有効にする場合のみ)
*.* に対しては決して付与しないでください。ユーザーが保持していない権限は、Write access スイッチが越えられない境界です。
エージェントの機能
接続後、Tony は以下を実行できます:接続を確認する
プロンプト例
書き込みアクセス
接続は読み取り専用の状態で提供され、2 つのスイッチが段階的に制限を開放します。
書き込みアクセスをオンにする前に検討すべき 3 点:
Blockedが保護するのはテーブルであり、行ではありません。 これはDROP TABLEとTRUNCATEのステートメントを拒否します。ALTER TABLE ... DELETE、DROP PARTITION、DROP COLUMNは拒否しません。これらはいずれもテーブルを残したままデータを削除します。2 つ目のスイッチの状態にかかわらず、Full accessは「エージェントがデータを破壊できる」と考えてください。- ClickHouse にはトランザクションがありません。
ALTER TABLE ... DELETEは非同期のミューテーションであり、DROPは即時に実行されます。どちらもロールバックできないため、復旧手段はバックアップからのリストアになります。 - より強い制御は権限(GRANT)です。 これらのスイッチは CloudThinker が
readonly=1を送信するかどうかを決めるだけであり、ClickHouse ユーザーがまだ持っていない権限を付与することは決してありません。CloudThinker ユーザーには、到達可能にしたいデータベースにのみ書き込み権限を与えてください。スイッチはその範囲を超えられません。
トラブルシューティング
ClickHouse rejected the username or password
ClickHouse rejected the username or password
ClickHouse は応答した上で認証情報を拒否しました。
- ユーザーが存在するか確認してください:
SHOW USERS; - パスワードは貼り付けずに入力し直してください。改行を含む値は、CloudThinker がサーバーに接続する前の段階で拒否されます。
- ClickHouse Cloud は一部の SSO でプロビジョニングされたユーザーのパスワード認証を無効にします。コンソールのログインを再利用せず、専用のデータベースユーザーを作成してください。
ClickHouse has no database named …
ClickHouse has no database named …
Default database に入力した名前は、ClickHouse が見つけられませんでした。データベース名は大文字と小文字を区別します。綴りを確認するか、このフィールドを空にしてサーバーの既定値を使用してください。
ClickHouse rejected the request path. Check the port.
ClickHouse rejected the request path. Check the port.
何かが応答しましたが、それは ClickHouse の HTTP インターフェースではありませんでした。
- Port と Use TLS が一致しているか確認してください:TLS ありは
8443、なしは8123。 - ネイティブ TCP ポート
9000は HTTP インターフェースではありません。接続をそこに向けると失敗します。
ClickHouse is unreachable
ClickHouse is unreachable
その host と port では何も応答しませんでした。
- Host に
https://プレフィックスや:portサフィックスが含まれていないか確認してください。どちらも専用のフィールドに入力します。 - ClickHouse Cloud の場合:サービスの IP アクセスリストに CloudThinker を追加してください。
- セルフホストの場合:
<listen_host>に公開したインターフェースが含まれているか、およびファイアウォールが8443または8123を許可しているか確認してください。 - TLS の不一致も同じように見えます。平文 HTTP のポートに対して Use TLS をオンにした場合や、HTTPS 専用のポートに対してオフにした場合です。
ClickHouse did not answer in time
ClickHouse did not answer in time
アドレスには到達できましたが、チェックがタイムアウトするまで応答がありませんでした。ClickHouse Cloud では通常、自動アイドリングが原因です。使われていないサービスは一時停止し、再起動するまで接続はタイムアウトします。サービスを起動してから接続し直してください。
readonly モードではクエリを実行できない
readonly モードではクエリを実行できない
接続は読み取り専用であり、これがデフォルトです。エージェントが書き込みできるようにするには、Write access を
Full access に設定して再接続してください。それでも失敗する場合、制限はサーバー側にあります。ユーザーに readonly の設定プロファイルが付いていないか(SHOW CREATE USER cloudthinker;)、およびクエリに必要な書き込み権限を保持しているかを確認してください。書き込みアクセスをオンにしても DROP が拒否される
書き込みアクセスをオンにしても DROP が拒否される
DROP と TRUNCATE は専用のスイッチの背後にあります。Allow DROP and TRUNCATE を Allowed に設定してください。これは Write access が Full access のときのみ表示されます。テーブル一覧が空
テーブル一覧が空
- ユーザーには個別のテーブルだけでなく、データベースに対する
SHOW TABLESとSELECTが必要です。 - メタデータクエリが行を返すよう
SELECT ON system.tablesを付与してください。
セキュリティ
- 最小権限 — エージェントがユースケースに必要な権限のみを付与します。まず読み取り専用から始め、後から拡張してください。
- デフォルトで読み取り専用 — エージェントにこの接続で変更を行わせる場合を除き、読み取り専用の認証情報を使用してください。
- 認証情報のローテーション — 通常のスケジュールに従ってキーとトークンをローテーションしてください。接続を更新すると、CloudThinker が新しい値を自動的に取得します。
- オフボーディング時に失効 — 接続を削除するか、チームメンバーが退職する際には、プロバイダー側で認証情報を無効化してください。
- 公開エンドポイントでは TLS — ClickHouse Cloud およびプライベートネットワーク外のエンドポイントでは Use TLS をオンのままにしてください。
- 専用ユーザー — 管理者アカウントを再利用しないでください。ユーザーを分けることで監査証跡が読みやすくなります。
- スイッチより権限 — ClickHouse ユーザーに付与された権限が永続的な境界です。Write access スイッチは CloudThinker が書き込みを要求するかどうかを決め、権限は ClickHouse がそれを許可するかどうかを決めます。
- サーバー側の読み取り専用 — 決して書き込みをさせない接続には、ステップ 3 の設定プロファイルを追加してください。
READONLYによりクライアント側から解除できなくなります。
関連
Tony Agent
データベース特化の最適化エージェント
PostgreSQL 接続
PostgreSQL データベースの同様のセットアップ