XenForo + Memcahed + ElasticSearchをPleskドメインにインストールし、Elastic Stackを使用してデータを分析する





コミュニティとの効果的なやり取りのために、多くの大規模な組織や企業は、古くからあるフォーラム形式を使用しています。 ソーシャルネットワークの一般的な形式とは異なり、フォーラムでは、より正確なデータ構造化、強力なツールを使用して情報を検索する機能、高度な評価とゲーミフィケーションシステムを使用する機能、モデレーションおよびスパム対策により、質的に異なるレベルでコミュニティを統合できます。



この記事の目的は、memcachedキャッシングと最も強力な検索エンジンElasticSearchを使用してフォーラムを展開するための最新のXenForoエンジンのインストール手順を説明することです。 これらのサービスはDockerコンテナー内で実行され、Pleskインターフェースを介してデプロイおよび管理されます。



さらに、この記事では、データ分析のためにPleskのコンテキストでElastic Stack (ElasticSearch + Logstash + Kibana)を広く使用する問題に対処しています。 たとえば、フォーラムでの検索クエリの分析やサーバーログの分析。



PleskドメインでXenForoエンジンに基づいてフォーラムを展開することから始めましょう。



  1. Splashでドメインforum.domain.tldのサブスクリプションを作成します
  2. このドメインのPHP設定で、使用するPHPの最新バージョンを選択します。 たとえば、PHP 7.1.10
  3. ファイルマネージャーに移動し、サイトのhttpdocsディレクトリで、おそらくfavicon.icoファイルを除くすべてを削除します
  4. ファイルマネージャーとアップロードボタンを使用して、XenForo配布ファイルをhttpdocs zipディレクトリにアップロードします。 たとえば、xenforo_1.5.15a_332013BAC9_full.zip
  5. [ファイルの抽出]ボタンでファイルを解凍します。 アーカイブの内容がアップロードディレクトリに解凍されます。 入力してすべてを選択し、[移動]ボタンを使用してすべてをhttpdocsディレクトリに転送する必要があります。 その後、アップロードディレクトリとxenforo_1.5.15a_332013BAC9_full.zipアーカイブを削除できます。
  6. forum.domain.tldサブスクリプションで、[データベース]セクションに移動し、将来のフォーラム用のデータベースを作成します。 名前、ユーザー名、パスワードは弊社の裁量で設定されます。 このようなもの:







    セキュリティのため、アクセス制御をローカル接続のみを許可するように設定することが重要です。
  7. フォーラムのインストールを開始します。 forum.domain.tldにアクセスします。 XenForoのインストールメニューが表示されます。 指示に従い、手順の1つで、作成されたデータベースの名前、そのユーザー名とパスワードを指定します。 次に、フォーラムの管理者アカウントを作成する必要があります。 インストールが正常に完了すると、フォーラムの管理パネルに入り、最終設定を行うことができます。
  8. フォーラムの作業を大幅に高速化するには、memcachedベースのキャッシュをフォーラムに接続し、Plesk Docker拡張機能の対応するdockerコンテナを使用します。 しかし、インストールする前に、サイトで使用されているバージョンのPHPのmemcachedモジュールをインストールする必要があります。
  9. Debian / Ubuntu Pleskサーバーの例を使用して、memcached PHPモジュールをコンパイルします。 必要なすべてのパッケージをインストールします。



    # apt-get update && apt-get install gcc make autoconf libc-dev pkg-config plesk-php71-dev zlib1g-dev libmemcached-dev
          
          





    モジュールをコンパイルします。



     # cd /opt/plesk/php/7.1/include/php/ext # wget -O phpmemcached-php7.zip https://github.com/php-memcached-dev/php-memcached/archive/php7.zip # unzip phpmemcached-php7.zip # cd php-memcached-php7/ # /opt/plesk/php/7.1/bin/phpize # ./configure --with-php-config=/opt/plesk/php/7.1/bin/php-config # export CFLAGS="-march=native -O2 -fomit-frame-pointer -pipe" # make # make install
          
          





    コンパイル済みモジュールをインストールします。



     # ls -la /opt/plesk/php/7.1/lib/php/modules/ # echo "extension=memcached.so" >/opt/plesk/php/7.1/etc/php.d/memcached.ini # plesk bin php_handler --reread # service plesk-php71-fpm restart
          
          



  10. インストールされたPlesk Docker拡張機能でmemcachedドッカーを見つけ、次の設定でインストールして実行します。





  11. その後、Pleskサーバーでポート11211を使用できるようになります。次のコマンドで操作性を確認できます。



     # lsof -i tcp:11211 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME docker-pr 8479 root 4u IPv6 7238568 0t0 TCP *:11211 (LISTEN)
          
          



  12. memcachedキャッシングをフォーラムに接続します。 これを行うには、ファイルマネージャーに移動し、コードエディターでファイルforum.domain.tld / httpdocs / library / config.phpを開きます。 最後に次の行を追加します。



     $config['cache']['enabled'] = true; $config['cache']['frontend'] = 'Core'; $config['cache']['frontendOptions']['cache_id_prefix'] = 'xf_'; //Memcached $config['cache']['backend']='Libmemcached'; $config['cache']['backendOptions']=array( 'compression'=>false, 'servers' => array( array( 'host'=>'localhost', 'port'=>11211, ) ) );
          
          



  13. フォーラムが正しく機能していることを確認してください。 次のコマンドを使用して、接続されたキャッシュの動作を直接確認できます。



     # { echo "stats"; sleep 1; } | telnet localhost 11211 | grep "get_" STAT get_hits 1126 STAT get_misses 37 STAT get_expired 0 STAT get_flushed 0
          
          



  14. XenForoベースのフォーラムに、強力な検索エンジンElasticSearchを接続できます。 これを行うには、XenForo Enhanced Searchおよびdocker container elasticsearchと呼ばれるXenForoプラグインをインストールする必要があります。 このDockerコンテナは、作業にかなりの量のメモリを必要とするため、サーバーには十分な量のメモリが必要です。 XenForo Enhanced Searchプラグインのインストールは、Plesk File Managerからzipファイルをダウンロードして解凍することでも実行できます。 XenForoプラグインのインストールの詳細は、関連ドキュメントに記載されています。 その結果、フォーラムの管理パネルで、ElasticSearch検索エンジンの次の設定を取得する必要があります。









  15. Plesk Docker拡張機能で検索を機能させるには、次の設定でelasticsearch dockerコンテナーをインストールする必要があります。







    次のコマンドを使用して、ポート9200が接続用に開いていることを確認します。



     # lsof -i tcp:9200
          
          



  16. その後、フォーラム管理パネルで、ElasticSearchが接続されていることを確認し、検索インデックスを作成する必要があります。









  17. その結果、強力な検索エンジンと高速化されたmemcachedキャッシュを備えた最新のXenForoエンジンに関するフォーラムができました。 機会のさらなる改善と拡大として、Kibanaを使用してフォーラムで検索クエリの分析を使用できます。 これを行うには、別個のkibana Dockerコンテナー、または1つのelasticsearch + kibana dockerコンテナーと、XenForo Enhanced Searchプラグインのパッチを使用する必要があります。 たとえば、検索クエリで使用されるキーワードに関するこのような統計を取得するには:









  18. XenForo Enhanced Searchプラグインのバージョン1.1.6のパッチが適用されたファイルは、ElasticSearch.phpにあります。httpdocs > library> XenES> Search> SourceHandlerディレクトリの元のファイルを置き換える必要があります。 saved_quiries。Kibanaでの分析に使用する必要があります。


興味深いアプリケーションは、AleschおよびAbalst Webalizerの標準分析システムをKibanaのより効率的で柔軟な分析システムに置き換えることです。 vhostログをElasticSearchに送信するためのオプションがいくつかあります。 例:





ここまでの問題は、ElasticSearchにログを正しく保存し、Kibanaを解析するために、json形式である必要があることです。 vhostレベルでは、nginx log_formatパラメーターを変更することはできません。 可能なソリューションのオプションの1つとして、これはFilebeatサービスを使用することです。Filebeatサービスは、通常のnginx、Apache、またはその他のサービスログを取得し、必要な形式に解析してさらに提供します。 さらに、異なるサーバーからログを収集できます。 一般に、実験の分野は巨大なようです。



たとえば、rsyslogを使用すると、他のシステムログをElastic Searchに送信してKibana分析を行うことができ、これは非常に機能的です。 たとえば、構成ファイル/etc/rsyslog.d/syslogs.confを使用すると、rsyslogd -dnコマンドで rsyslogサービスを実行した後、Logstash / Kibanaに便利な形式でローカルのsyslogログをElasticsearchに送信できます。



 # for listening to /dev/log module(load="omelasticsearch") # for outputting to Elasticsearch # this is for index names to be like: logstash-YYYY.MM.DD template(name="logstash-index" type="list") { constant(value="logstash-") property(name="timereported" dateFormat="rfc3339" position.from="1" position.to="4") constant(value=".") property(name="timereported" dateFormat="rfc3339" position.from="6" position.to="7") constant(value=".") property(name="timereported" dateFormat="rfc3339" position.from="9" position.to="10") } # this is for formatting our syslog in JSON with @timestamp template(name="plain-syslog" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"host\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"tag\":\"") property(name="syslogtag" format="json") constant(value="\",\"message\":\"") property(name="msg" format="json") constant(value="\"}") } # this is where we actually send the logs to Elasticsearch (localhost:9200 by default) action(type="omelasticsearch" template="plain-syslog" searchIndex="logstash-index" dynSearchIndex="on" bulkmode="on" # use the bulk API action.resumeretrycount="-1" # retry indefinitely if Logsene/Elasticsearch is unreachable )
      
      





ElasticSearchインデックスlogstash-2017.10.10が正常に作成され、Kibanaで使用および分析できる状態になっていることがわかります。



 # curl -XGET http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open .kibana TYNVVyktQSuH-oiVO59WKA 1 1 4 0 15.8kb 15.8kb yellow open xf JGCp9D_WSGeuOISV9EPy2g 5 1 6 0 21.8kb 21.8kb yellow open logstash-2017.10.10 NKFmuog8Si6erk_vFmKNqQ 5 1 9 0 46kb 46kb yellow open saved_queries GkykvFzxTiWvST53ZzunfA 5 1 16 0 43.7kb 43.7kb
      
      





その結果、必要なデータを使用してKibanaダッシュボードで作成し、そこから独自の視覚化を作成できます。 たとえば、このダッシュボードのようなもの:







また、nginx access.log分析の場合、何らかのダッシュボードを作成できます。







その結果、あらゆる種類の統計データを収集して分析する追加機能を備えた、コミュニティと連携するための最新のプラットフォームが得られます。



もちろん、この記事は一般的なものであり、推奨事項です。 セキュリティの問題など、多くの重要な側面については言及していません。方向を示し、考えられるシナリオとそれらを実装する方法を説明しています。 経験豊富な管理者は、自分で微調整の詳細を行うことができます。 Elastic Stackは、好みに応じて目的の結果を得ることができるツール、コンストラクターのようなものです。 将来的に作業したい、分析する必要がある必要かつ正しいデータを彼に提供することだけが重要です。



All Articles