Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Alibaba Cloud Elasticsearch勉強会資料

Hironobu Ohara
September 30, 2021

Alibaba Cloud Elasticsearch勉強会資料

Hironobu Ohara

September 30, 2021
Tweet

More Decks by Hironobu Ohara

Other Decks in Technology

Transcript

  1. 注意事項 2 本書はElasticsearch 7.0 以上をベースとしています。 そのため、6.x世代のものは対象外になります。 Ex: String型 →Text型、Typeの廃止、template化 etc….

    Elasticsearch ML、Graph、Notification、SIEMなどは今回は記載しません。 (あくまでも基礎) PPTにあるソースコードをコピペしながら演習する形になりますが、pptの文字自動 変換によりクエリがうまくまわらない部分があるかもしれないので、その点注意ください。 ※本資料は2021年4月27日時点でのサービス内容、SLA、価格についてご説明になります。 最新の情報はAlibaba Cloud公式サイト( https://www.alibabacloud.com/ )にて ご確認ください。
  2. 6 OpenSource Elasticsearch OpenSource Kibana OpenSource Logstash X-pack ElasticFlow Smart

    O&M system Eyou SQL APM Metric/Log Analysis OpenSource Functions Differentiation Functions Elastic & Alibaba Cloud Alibaba Cloud Elasticsearch Product Alibaba CloudはElastic社パートナーのため、 Elastic正規版と同じ機能をフルサポート。 https://www.elastic.co/jp/elasticon/tour/2019/beijing/alibaba
  3. ちょっと余談・可視化ツールについて 15 ダッシュボード 分析基盤として可視化ツールは大きく4種類あります ススプレッドシート ノートブック Jupyter、AI Platform Notebooksなど (対話型で分析する用途が

    多め) 例: ⇒可視化ツールの性格上、目的に応じた使い分けがベストです BIツール 内容 長期的なスパンのデータを蓄 積し、SQLなどクエリエンジン を使って可視化。 データを蓄積するために、整 形処理(ETL)があることか らバッチ処理が多い。 短期的なスパンのデータを検 索エンジンを使って可視化。リ アルタイム可視化としてリアル タイム処理用途が多く、生 データをそのまま可視化するこ とがある。 データを使って、ピボットテーブ ルを使ったクロス集計やグラフ 作成し、可視化。大量データ は扱えないので、比較的ス モールデータでの対処になる。 Kibana、DataV、 Grafanaなど (公開後、操作はあまりし ない。監視や定例レポート 用途が多め) Tableau、DMS、 QuickBI、Metabase、な ど(SQLを使って日付やカ テゴリ絞りをしながらデータド リブン分析) Excel、Googleスプレッド シート、DataWorks DataMapなど (直接データを集計や編集 したりする用途が多め) Pythonなどプログラミング言 語を使って、対話型でアドホッ ク分析し可視化。 作業の過程を残しやすいため、 Step-by-Stepでデータ分 析によるアプリケーション開発 が可能。
  4. ちょっと余談・可視化ツールについて 17 ダッシュボード ススプレッドシート ノートブック BIツール アドホック分析や定例レポート用途 データ分析者や開発者向け (万能スタイル。ただし大容量のデータを扱う ので、バックエンドの基盤サービスが鍵)

    定例レポート、監視用途 運用者、経営者層向け (過去のデータにはあまりこだわらない) アドホック分析用途 非エンジニアやデータ分析者向け (暫定措置が多い) アドホック分析や機械学習開発用途 データ分析者や開発者向け向け (PythonやScalaなどプログラミング言語を 使って対話するようにデータの中身を分析)
  5. ログデータの活用ユースケース 19 Applicationログ アクセスログ 認証ログ DB監査ログ 認証ログ 操作ログ イベントログ エラーログ

    Firewallログ IDS/IPSログ WAFログ パケットログ アプリケーション層 ミドルウェア層 サーバ基盤/OS ネットワーク ITシステム Webマーケティング セキュリティ監視・対策 ITインフラ活用 各種ログ(実績)をベースとした、データドリブンな意思決定を実施 Ex: PolarDBのAutoScale、リテールの売り上げPOS、Web三層のイベントログ/アクセスログ、 SBKK OAPCの外部デバイス接続、社内NWで外部サイトの閲覧、etc….
  6. 監視系目的としたログ収集・蓄積・可視化ツール:Elastic 20 可視化 保存/蓄積 収集 異常検知 認証/暗号化 相関分析 通知 定例レポート

    Security Monitoring Alerting Reporting Graph Machine Learning Kibana Elasticsearch Logstash Beats + 「決まった方法でデータを収集」かつ「データ保持は短期間」、「定型的なクエリ」を 使うシナリオとして、Elasticsearchがあります。 ※逆にデータ保持期間が長い、もしくは非定型なクエリなど、要件が異なる場合は、別のサービスを使った方が良いです
  7. Elasticsearch 21 Elasticsearch • Javaベースの分散処理型検索エンジン • 大規模な環境でも利用することが可能 • RESTful検索連携が可能 Kibana

    Logstash Beats • Elasticsearchで蓄積したデータを可視化するツール • Node.jsベースでChromeなどWebブラウザで可視化 • URLで共有や、ユーザごとに閲覧・操作権限を付与可 • リアルタイム更新が可能なので、監視にも使いやすい • 各環境上の様々なデータを集め、Elasticsearchなど 指定した分析基盤に転送・連携できるツール (LogServiceやkafkaもLogstashが利用可能) • テキストファイルであれば何でも可能 (text/json/xml/csv) • 外部API連携や、RDBに接続し転送することも可能 • Linux、WindowsなどのOSにインストールし、 機器データをElasticsearchに転送する収集ツール • ネットワークのパケットやWindowsイベントデータ、 CPU/メモリ使用率など死活監視情報をカバー • 特定データであれば、BeatsのModulesを使うことで、 自動構築が可能
  8. 他機能 22 APM SIEM • Application Performance Monitoringの略 • アプリケーション内部にagentをインストールすることで、

    パフォーマンスやヘルスチェックをkibanaで可視化 • 利用可能な言語はJava、Go、Node.js、Python、 PHP、Ruby、.NET、Javascriptなど • Security Information and Event Managementの略 • Host/ログイン認証/プロセス一覧/閲覧端末/イベン ト一覧/DNSトラフィック/NetFlowなどを包括して閲 覧することが可能 • 異常検知ジョブと連携した検知ルールパッケージにより すぐ構築を実現
  9. その他Elasticsearch操作クライアント 23 Python SDK RESTful APIコマンド https://elasticsearch-py.readthedocs.io/en/latest/ python -m pip

    install elasticsearch PythonによるElasticsearchクライアントがあるので、 これを使ってElasticsearchを操作することが出来ます。 https://medium.com/hello-elasticsearch/elasticsearch-api- 83760ce1424b RESTful APIを使ってElasticsearchを操作することが 出来ます。Python SDKよりは多め。 https://www.elastic.co/guide/en/cloud/current/ec-api- deployment-crud.html
  10. データ連携の流れ(1)Basicな分析基盤 25 性能データ イベントログ 認証ログ ログファイル データベース ネットワーク機器 API サーバー

    Beats Logstash Metricbeat, winlogbeat, Auditbeat, Filebeat, packetbeat… Kibana Elasticsearch Python SDK Java SDK アプリケーション Restful API 3rd Tools 検索 ログ管理DB Webブラウザ
  11. Elasticsearchの基本的な構造・概念 28 Index Index Index Document1 Document2 Document3 Field1 Field2

    Field3 Field1 Field2 Field3 Field1 Field2 Field3 ・・・ Index Elasticsearchのノード集合体 RDBで例えるとデータベースの位置づけ Mapping ドキュメントの各フィールドのデータ構造やデータ型の指定 RDBで例えるとフィールドのメタデータ、スキーマの位置づけ Document Elasticsearchが格納する1つの文章の単位 RDBで例えるとレコード(行)の位置づけ Field ドキュメント内の項目名(key)と値(Value) RDBで例えるとカラム(列)の位置づけ ・・・ Mapping ちなみに、Elasticsearch 7.0.0以降、Typeという概念の指定は非推奨になりました(RDBにはない) そのため、RDS比喩が以前よりしっくりくるようになっています。 ただし、JSONなど様々なドキュメントがDocument/Fieldへ組み合わせる処理をするのに必要なレイヤーなので、 ここの挙動を含め覚えて損はないと思います。 Cluster Elasticsearchが格納するドキュメントのコレクション RDBで例えるとテーブルの位置づけ
  12. Elasticsearch – 分散環境で水平スケーリング 31 1 node cluster 5 node cluster

    100 node cluster クラスターは必要に応じて拡張可能 Master Node Master Nodes Ingest Nodes Ingest Node Data Nodes - Hot Data Nodes - Warm Data Nodes Node = Elasticsearchのインスタンス Cluster = Elasticsearch Nodeの集合体
  13. 物理的な概念(フルマネージドサービスなので気にしなくてもいい((´∀`)) 32 • Master ノード • クラスターのメタデータなどを管理するノード • Master ノードはクラスターに1台のみ

    • マスターノードに昇格可能なノードは Master-eligible と 呼ばれるが、Master ノードでは無い • Data ノード • 実際のデータを格納するノード • リクエストの処理(検索や集計など)を実施 • リクエストを別のノードにルーティング (別のノードがシャード持っている場合など) • Ingest ノード • データの変換や加工を実施し、Data ノードに格納 • LogStashと同じ役割 • Coordinating ノード • リクエストをルーティングする(Dataノードもできる) • Data ノードにルーティング作業の負荷を掛けたくない場合に ルーティング処理専用のノードを用意するため クラスター ノード1 ノード2 ノード3 Primary シャード1-1 Replica シャード2 Replica シャード1-2 Replica シャード1-1 Primary シャード1-2 インデックス1 インデックス2 Primary シャード2
  14. 他の言語でも簡単に使用可能 33 Elasticsearch HTTP リクエスト HTTP レスポンス Restful API クライアント

    アプリケーション Java、PHP、Python、Perlなど ElasticsearchはHTTPで通信ができるようなREST APIを提供しているので、 任意の言語でアプリケーションを作成することが出来ます。 ※このRESTful APIはCRUDオペレーションと呼びます。CRUDはCreate、Read、Update、Deleteの略称用語です。
  15. ここからはElasticsearchを実際に操作します 35 ①以下構成にあわせて、Elasticsearchクラスタを起動します。 設定名 設定値 Region Japan (Tokyo) Zone Tokyo

    Zone A(Bでもどっちでもいい) Zone 1-AZ Resource Group Default Resource Group Version 7.10 Data Node Type 2C 8GB Data Nodes 3 Disk Type Cloud SSD Disk Encryption No Node Storage 100 Kibana Node YES Kibana Node Type 2C 4GB Warm Node No Dedicated Master Node No Client Node No Username elastic Password (各自任意のパスワードを入れてください) ②同じRegion/Zone/VPCのECSを購入・起動します CentOS: 7.9 64-bit / PublicIP割り当て ※もしローカルで操作するならこの作業はSkipしてください ③セキュリティグループで、Elasticsearchとkibanaが通るように、 Port 9200 と 5601を許容します ④Elasticsearch側で、インターネットアドレスを有効にします。 ⑤Elasticsearch側で、Public Network Whitelistに アクセスするIPアドレスの場所としてIPアドレスを入力します。
  16. kibanaのDevToolについて 37 ①コンソールから DataVisuallization → Access over ther Internet ③「Explore

    on my own」をクリックし、左側のメニューバーから 「Dev Tools」を選択します。 ②kibanaコンソールにログインします。 Username: elastic Password: 購入時に設定したPW ④ここでAPIコマンドを入力します。 実行するときは、再生ボタンをクリックします。
  17. 参考:Elasticsearch for VSCodeの使い方 39 ①まずは新規で「.es」のファイルを保存します。 ②ファイル保存が出来たら、自動で接続パスが表示されます。 ③http://user:pass@host:portの形式で設定します HostはPublic Network Accessを指します。

    もし接続パスを変更する場合は、Ctrl + Shift + Pを押してES:Elastic:Set Hostから 再設定します。 ④あとはQueryを入力します。 たとえば、「GET _search」を入力すると、コマンドの上に Run Queryが表示されます。これをクリックして実行します。
  18. インデックス操作関連(1)コピペして色々試してください 41 #インデックスの作成 # CREATE TABLE handson_index PUT handson_index?pretty #指定したインデックスの存在チェック

    # `?pretty=true` をつけると結果を整形してくれる # DESCRIBE handson_index # SHOW COLUMNS FROM handson_index GET handson_index/_mapping?pretty=true #指定したインデックスの存在チェック # DESCRIBE handson_index # SHOW COLUMNS FROM handson_index GET handson_index/_mapping #インデックスの削除 # DROP TABLE handson_index DELETE handson_index?pretty
  19. インデックス操作関連(2)コピペして色々試してください 42 # インデックスの一覧 # SHOW TABLES GET _aliases?pretty #

    Mappingの設定 PUT handson_index?pretty { "mappings" : { "properties" : { "id" : { "type" : "long", "store" : true }, "field1" : { "type" : "text", "analyzer": "kuromoji"}, "field2" : { "type" : "text", "store" : true, "analyzer": "kuromoji" } } } } # エイリアスの追加 POST _aliases?pretty { "actions" : [ { "add" : { "index" : "handson_index", "alias" : "alias_test" } } ] } # エイリアスの削除 POST _aliases?pretty { "actions" : [ { “remove" : { "index" : "handson_index", "alias" : "alias_test" } } ] }
  20. ドキュメント操作関連。コピペして色々試してください 43 # ドキュメントの登録 # INSERT INTO xx,xxx,xxx ・・・ PUT

    handson_index_pos/_doc/1 { "date":"2021/03/01 09:00:00+0900", "name":"りんご、ばなな、めろん", "price":"300" } # ドキュメントの取得 # SELECT * FROM xxx GET handson_index_pos/_doc/1 # ドキュメントの更新 # UPDATE xxx PUT handson_index_pos/_doc/1 { "date":"2021/03/01 09:00:00+0900", "name":"りんご、ばなな、めろん、更新した", "price":"300" } # ドキュメントの削除 DELETE handson_index_pos/_doc/1 # 削除結果の確認 GET handson_index_pos/_doc/1
  21. 演習(以下コピペして実行してください) 45 # handson_index_posのindex作成 & Mapping設定 PUT handson_index_pos?pretty { "mappings":

    { "properties": { "date": { "type": "date","format": "yyyy/MM/dd HH:mm:ssZ" }, "name": { "type": "text" }, "price": { "type": "long" } } } } # handson_index_posの構成の確認 GET handson_index_pos # データ格納 PUT handson_index_pos/_doc/1 { "date":"2021/03/01 09:00:00+0900", "name":"りんご、ばなな、めろん", "price":"300" } PUT handson_index_pos/_doc/2 { "date":"2021/03/01 09:10:00+0900", "name":"ばなな、すいか、めろん", "price":"500" } PUT handson_index_pos/_doc/3 { "date":"2021/03/01 09:20:00+0900", "name":"りんご、ばなな", "price":"200" } PUT handson_index_pos/_doc/4 { "date":"2021/03/01 09:30:00+0900", "name":"すいか、かぼちゃ", "price":"400" }
  22. 参考:複数のデータ登録がめんどくさい場合 46 Bulk APIを使って一気にデータを登録することができます。 (とはいえ、ESの挙動で勉強にならないから、 今回は1つ1つずつ登録して挙動を確認したほうがいいと思います((´∀`*)) POST _bulk {"index": {"_index":

    "handson_index_pos", "_id": "1"}} {"date": "2021/03/01 09:00:00+0900", "name": "りんご、ばなな、めろん", "price": "300"} {"index": {"_index": "handson_index_pos", "_id": "2"}} {"date": "2021/03/01 09:10:00+0900", "name": "ばなな、すいか、めろん", "price": "500"} {"index": {"_index": "handson_index_pos", "_id": "3"}} {"date": "2021/03/01 09:20:00+0900", "name": "りんご、ばなな", "price": "200"} {"index": {"_index": "handson_index_pos", "_id": "4"}} {"date": "2021/03/01 09:30:00+0900", "name": "すいか、かぼちゃ", "price": "400"}
  23. Elasticsearchから検索する方法 47 https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html 基本的にはSearch APIを使います。(他にGraph API、DSLで検索などもあります) Search APIとして、 • match_all

    • size • from • sort, order • _source • match • match_phrase • bool query • must • should • must_not • range • Aggs などのクエリ機能がありますが、ひとまずはmatch、rangesを把握すればよいかと思います。
  24. 参考:Query DSLとQuery stringについて 49 # 全文検索・特定の単語が含まれるドキュメントを検索 GET /handson_index_pos/_search { "query":{

    "match": { "name": "ばなな" } } } Query DSLはJSONベースで検索 DSLはDomain Specific Language の略称 リクエストボディが必要 複雑なQueryにも強く、類似検索や関連性検索も可能 Elasticsearch APIの全てを利用可能 非常に強力 Query StringはURLベースで検索 アプリケーション、例えばGASやslack、shellからESへ 直接検索することも可能 簡単ですぐ使用できるが、複雑なQueryには向いていない クォートやカッコ、カンマなどでタイポしやすい(URLなので、、) # 全文検索・特定の単語が含まれるドキュメントを検索 curl -XGET ”https://elastic:FY21!hands- [email protected]:9200/ handson_index_pos/_search?q=name(“ばな な”) Query Stringだとmatchクエリが使えてないので(正確には使えますが複雑なクエリになります) 結果論として Query DSLの方がより関連性を持った多くのドキュメントがヒットし、 Query Stringは完全一致のドキュメントがヒットします。
  25. Japanese (kuromoji) Analysis pluginの確認 52 https://www.elastic.co/guide/en/elasticsearch/plugins/7.12/analysis-kuromoji.html#analysis-kuromoji コンソールから「Japanese (kuromoji) Analysis plugin」があることを確認します。

    もしPluginが無い場合は公式サイトなどから、同じバージョンに合わせてプラグインをダウンロードし、 「Custom Plug-ins」としてインストールします。
  26. 日本語検索について(2) 53 # handson_index_textのindex作成 & Mapping設定 PUT handson_index_text?pretty { "mappings":

    { "properties": { "date": { "type": "date","format": "yyyy/MM/dd HH:mm:ssZ" }, "message": { "type": "text" ,"analyzer": "kuromoji"} } } } # handson_index_textの構成の確認 GET handson_index_text # データ格納 PUT handson_index_text/_doc/1 { "date":"2021/03/01 09:00:00+0900", "message":"今日の昼ごはんはりんごです。おいしいですよ" } PUT handson_index_text/_doc/2 { "date":"2021/03/01 09:10:00+0900", "message":"りんごが売り切れたので、バナナになりました。バナナ安いしね" } PUT handson_index_text/_doc/3 { "date":"2021/03/01 09:20:00+0900", "message":"バナナが腐っていました。みかんにしましょう。ああめんどくさい" } Index登録時、Mapping経由で、 ”analyzer“:”kuromoji”を登録します。
  27. 日本語検索について(3) 54 GET handson_index_text/_search { "query": { "match": { “message”:

    “安い" } } } あとは日本語検索ができます。以上です。 余談として、、 例えば、「りんご」「リンゴ」「林檎」「Apple」 これらを同義語として利用した検索をしたい場合、 Index作成時、settingで同義語(synonyms)の 設定をします。 PUT handson_index_text?pretty { "settings": { "analysis": { "filter": { "synonym_filter": { "type": "synonym", "synonyms": [ "りんご,リンゴ,林檎,Apple" ] } } } }, "mappings": { "properties": { "date": { "type": "date","format": "yyyy/MM/dd HH:mm:ssZ" }, "message": { "type": "text" ,"analyzer": "kuromoji"} } } } https://www.elastic.co/guide/en/elasticsearch/refer ence/7.x/analysis-synonym-tokenfilter.html
  28. 関連度(Relevance) 55 Elasticsearchは検索に特化しており、RDBのようなピンポイント検索だけでなく、 データを検索するときに最も関連のある(relevant)docを検知することができます。 クライアント Elasticsearch “Alibaba Elastic”を探しています 検索結果は 全部で18hitしました。

    なるほど、じゃあ関連度がかなり 高いものはある?  対象のdocを全て発見できたか?  検索結果に、関連性の低いdocが何件あるか?  検索結果の表示順位はどのような基準か? etc・・・
  29. 関連度の計測 56  適合率(Precision) • 検索結果に、関連のない結果が含まれているか?→検索結果のdoc件数(true positives + false positives)

    に対する結果の中の本当に含まれるべき件数(true positives)の割合  再現率(Recall) • 検索結果に、関連のあるデータが含まれていなかったか? →結果に含まれるべきdoc件数(true positives + false negatives)に対する結果の中の本当に含まれるべき件数(true positives)の割合  ランキング(Ranking) • 検索結果の順位は、最も関連性が高いものが上位で、関連性が低いものが下位か?  Elasticsearchは、documentのマッチしているランキングを決めるために、scoreを使用 True positives False positives True negatives False negatives
  30. 65

  31. LogService経由でOSSログ可視化(6) 78 input { logservice{ endpoint => "<endpoint> " access_id

    => "< access_key_id >" access_key => "< access_key_secret >" project => "<Logservice project name>" logstore => "<logservice logstore name>" consumer_group => "consumer_group1" consumer => "consumer1" position => "end" checkpoint_second => 30 include_meta => true consumer_name_with_ip => true } } output { elasticsearch { hosts => [“<elasticsearch endpoint>"] index => “<index name>" user => “<user>" password => “<passowrd>" } } https://www.alibabacloud.com/help/doc-detail/28998.htm ちなみにconsumer_groupおよびconsumerはLogServiceに 対する複数ユーザーからのリソース割当のことを指しますが、 今回は一人称利用なので、そのまま記述で問題ないと思います。 helpに沿って、LogServiceのProject、LogStore、 AccessID、AccessKeyを入力します。 https://www.alibabacloud.com/help/doc-detail/139627.htm
  32. Beatsとは 84 https://www.elastic.co/guide/en/beats /libbeat/current/community- beats.html Beatsとして足りないshipperがあれば コミュニティから参照 or 自作可 Beatsのためのtemplateダッシュボードがあるので、

    Beatsを導入後、即templateのダッシュボードを使った展開が可能。 https://github.com/elastic/beats-dashboards Beatsは軽量データ取り込みプラットフォーム。 LogStashはETLが出来るパワフルなデータ取り込 みツールであれば、Beatsはインプットに特化したシ ンプルかつ軽量なデータ取り込みツールです。 https://www.elastic.co/jp/beats/
  33. winlogbeatによる可視化について 85 WinlogbeatはWindowsの様々なイベントログを収集する 軽量shipperです。 嬉しいのは、ドメインコントローラー側にインストールすれば、 ActiveDirectoryから対象の端末を含めOSレベルの挙動を 監視することが出来ます。 Event ID イベント内容

    4624 ログイン成功 4625 ログイン失敗 4656 ファイルオープン、ファイル削除 4658 ファイルクローズ 4663 ファイルアクセス 4690 ファイルコピー 4740 アクセスロックアウト 1000 アプリケーションの異常終了 1002 アプリケーションのハングアウト https://docs.microsoft.com/en-us/windows- server/identity/ad-ds/plan/appendix-l--events-to-monitor https://github.com/elastic/beats/issues/16334
  34. winlogbeat設定(6) 91 以下のコマンドでElasticsearchにIndex templateをローディングします。 .¥winlogbeat.exe setup --template -E output.logstash.enabled=false -E

    'output.elasticsearch.hosts=["elastic:FY21!hands-on@es-cn- mjc2443530001o0te.public.elasticsearch.aliyuncs.com:9200"]' 以下のコマンドでkibanaにdashboardをローディングします。 .¥winlogbeat.exe setup --dashboards
  35. WindowsのEvent Logは400種類以上もあります 94 Get-WinEvent -ListLog * | Format-List -Property LogName

    以下コマンドで取得可能なイベントを一斉に取得&コピーします。 VS Codeなどでイベント名の先頭文字を一斉置換します。 取得したいイベント一覧をwinlogbeat.ymlに反映します 設定後はサービスの 再起動も忘れずに、、
  36. この応用として、様々なシナリオにおいて監視基盤運用ができます。 96 DaaS・ リモートデスクトップ セキュリティ監視 PC起動/停止/サスペンド日時 ログイン・ログオフ日時 CPU・memory使用率 アプリケーションログ イベントログ

    etc・・・ ネットワーク監視 ネットワークトラフィック 帯域・CPU使用率 アクティブユーザ/セッション数 ロス率・死活監視 etc・・・ HTTP・DNS・アクセスログ 操作・認証ログ Anti-DDoSログ WAFログ Firewallログ パケットログ ネットワークトラフィック etc・・・
  37. 再掲:ログデータの活用ユースケース 97 Applicationログ アクセスログ 認証ログ DB監査ログ 認証ログ 操作ログ イベントログ エラーログ

    Firewallログ IDS/IPSログ WAFログ パケットログ アプリケーション層 ミドルウェア層 サーバ基盤/OS ネットワーク ITシステム Webマーケティング セキュリティ監視・対策 ITインフラ活用 各種ログ(実績)をベースとした、データドリブンな意思決定を実施 Ex: PolarDBのAutoScale、リテールの売り上げPOS、Web三層のイベントログ/アクセスログ、 SBKK OAPCの外部デバイス接続、社内NWで外部サイトの閲覧、etc….
  38. Filebeat設定(1) 99 ①コンソールからFilebeatを設定します。 (ECSなどターゲット指定あり。またECSにはaliyun.serviceおよびdockerがactiveになってることが前提です。) ※Filebeat log file pathはOS、Versionごとに パスが変わるため、そこは合わせて調整してください。 ※先に対象のElasticsearch

    > kibana > kibana ConfigurationでPrivate Network Accessを 有効化すると、BeatsからKibanaへデータを送信、 すぐ可視化することが出来ます。 https://www.elastic.co/guide/en/beats/filebeat/index.html ※Beatsのデフォルトインストールディレクトリは /opt/aliyunbeats/ です。
  39. 参考:aliyun-knn(ベクトル検索) 104 aliyun-knnは4core 16GB以上が必須となります。 顔認識 レコメンド スマートアシスタント https://www.youtube.com/watch?v=QTrPvtYAVIc&feature=emb_logo 背景:Facebookが開発したFaissなどの ベクトル検索ライブラリの課題

    1. パフォーマンスが遅い 2. フェイルオーバー および分散機能がない 3. 増分データの反映ができない 4. C++、Pythonの学習コストが必要 Alibaba Cloudのみ、aliyun-knnライブラリを開発 https://developer.aliyun.com/article/748117 このaliyun-knnプラグインがあって、ECサイトらWebサービス、 チャットボットなど『低レイテンシで大規模のベクトル検索がで きるサービス』にて数社の導入実績あり
  40. HNSWとは 105 https://www.semi.technology/developers/weaviat e/current/vector-index-plugins/hnsw.html HNSWはHierarchical NSW、NSWを階層的 に重ねながら、探索効率を上げる手法です。 NSWはNavigable Small World、データを二

    次元空間にPlotしながらベクトル間の距離を計算 することで、探索時ベクトルとの距離が近いデータを 検出するアプローチです。
  41. Index作成 106 PUT handson_aliyunknn_index { "settings": { "index.codec": "proxima", "number_of_shards"

    : 1, "number_of_replicas" : 1 }, "mappings": { "properties" :{ "feature" : { "type": "proxima_vector", "dim" : 2 }, "id" :{ "type" : "keyword" } } } }
  42. 特徴量データを登録 107 POST handson_aliyunknn_index/_doc { "id" : 1, "feature" :

    [1, 2] } POST handson_aliyunknn_index/_doc { "id" : 2, "feature" : [3, 4] } POST handson_aliyunknn_index/_doc { "id" : 3, "feature" : [5, 6] } POST handson_aliyunknn_index/_doc { "id" : 4, "feature" : [7, 8] } POST handson_aliyunknn_index/_doc { "id" : 5, "feature" : [9, 10] }
  43. 探索 108 GET handson_aliyunknn_index/_search { "query": { "bool":{ "must":[{ "hnsw":{

    "feature": { "vector":[5.5,6.5], "size": 10 } } },{ "term":{ "id":2 } } ] } } }
  44. 全体的な流れ 112 Local or ECS (Flask + Python) Elasticsearch User

    ③データを登録 ④検索したい 画像データを選定 ⑦検索したいデータに対する 類似ベクトル検索 ⑧結果返却 ⑨結果表示 ①⑤画像データを Kerasによる 特徴量データへ変換 ②⑥画像データを 特徴量データへ 変換して返却 KerasでなくTensorflow、OpenCVでも可。 検索した結果はどのような基準でヒットするかに 合わせて用途を使い分けたほうがいいです。 Ex: 輪郭が似ている、色彩が似ている、 特徴量データのベクトルが似ている etc