ホームページ ウェブフロントエンド jsチュートリアル Node.js と MongoDB は単純なログ分析を実装します system_node.js

Node.js と MongoDB は単純なログ分析を実装します system_node.js

May 16, 2016 pm 04:02 PM
mongodb node.js

最近のプロジェクトでは、分析を容易にするためにプロジェクト ログが JSON 形式で保存されました。以前はログをファイルに直接保存していましたが、良いタイミングでMongoDBが視界に入ってきたので、ログをMongoDBに保存しました。ログを保存するだけでは意味がありません。最も重要なのは、ログからビジネスの傾向やシステムパフォーマンスの抜け穴を発見することです。以前は、Java で作成され、Tomcat で実行される分析モジュールがありました。実装は非常に重量があり、新しいインジケーターを追加するプロセスも面倒で、NFS が原因で分析が失敗します。私はずっとそれを書き直したいと思っていて、最初は Ruby On Rails を使いたいと思っていましたが、学習して開発する時間がありませんでした (言い訳を探しています!)。杭州で開催された QCon 2011 で Node.js に再会しました。それについては以前から聞いていましたが、詳しくは勉強していませんでした。Taobao Su Qian 氏の講演を聞いた後、すぐに Node.js を使用することを思いつきました。このログ分析システムを導入します。フロントエンドも JS を使用し、サーバーも JS を使用し、データベース シェルも JS であることは考えてみれば素晴らしいことです。もちろん、最も重要なことはコード サイズが小さいことです。

1. Node.js を使用してサーバー側コードを実装します

優れたスタイルと高速なコード記述を実現するには、シンプルなフレームワークを採用することが避けられません。 Express はほとんどの機能を実装していますが、慣れるまでに時間がかかり、このプロジェクトにとっては少し重いように感じます。 Node.js の公式 Web サイトに チャット デモ があります。このコードは単純に移動され、URL の処理と JSON の返しをカプセル化します。そこで、fu.js を直接使用して、server.js を書き直しました。

コードをコピー コードは次のとおりです:

HOST = null // ローカルホスト
ポート = 8001;

var fu = require("./fu"),
sys = require("util"),
url = require("url"),
mongo = require("./request_handler");

fu.listen(Number(process.env.PORT || PORT), HOST);

fu.get("/", fu.staticHandler("index.html"));

シンプルすぎませんか? !しかし、それは事実であり、サーバーは確立されています。
リクエストを処理する request_handler.js コードを見てみましょう:

コードをコピー コードは次のとおりです:

var mongodb = require("mongodb");
var fu = require("./fu");


// ユーザーアクショントップ 10
fu.get("/userActionTop10", function(req, res){
mongodb.connect('mongodb://localhost:27017/log', function(err, conn){
conn.collection('action_count', function(err, coll){
coll.find({"value.action":{$in:user_action}}).sort({"value.count":-1}).limit(10).toArray(function(err, docs){
if(!err){
var action = [];
var count = [];
for(var i = 0; i //console.log(docs[i]);
action.push(docs[i].value.action);
Count.push(docs[i].value.count);
}
res.simpleJSON(200, {action:action, count:count});

//データベース接続を忘れずに閉じてください
conn.close();
}
});
});
});
});

2. クライアント

ログ システムで最も重要なことは、視覚的な表示です。ここでは JQuery jqPlot Chart のプラグインが使用されます。まず、グラフィック表示用のコンテナとして静的 HTML ページを使用します:

コードをコピー コードは次のとおりです:



  <頭>
   
    ランデブーモニターシステム
   
   
    <スクリプト src="js/jquery.jqplot.min.js">
   
   
   
   
   
   
   
    <スクリプト src="js/plugins/jqplot.json2.min.js">
   
    <リンク rel="stylesheet" href="style/base.css">
    <スクリプト src="js/charts.js">
 
 
 

これは jqPlot の例の完全な結果です、よろしくお願いします。
以下は、図形の生成を表示するために使用されるchart.js:
です。

复制代码代码如下:

// すべてのチャート描画関数を保存します。1 つのチャートを無効にしたい場合は、
だけが必要です // 関数を配列に入れるときにプッシュ行をコメント化します。
var 描画 = [];

/****************************** トップ 10 ユーザーアクション開始 ***************** ****************/
document.write('

');


vardrawUserActionTop10Chart = function(){
  if(!$("#userActionTop10Chart").attr('class')){
    $("#userActionTop10Chart").attr('class', 'small_chart');
  }


  $.ajax({
    非同期:false,
    URL: '/userActionTop10',
    データ型:'json',
    キャッシュ: false、
    成功:関数(データ){
      試してみてください{
        $('#userActionTop10Chart').html('');


        $.jqplot('userActionTop10Chart', [data.count], {
          タイトル: "ユーザー アクション トップ 10",
          シリーズデフォルト:{
            レンダラー:$.jqplot.BarRenderer,
            rendererOptions: {fillToZero: true},
            pointLabels: {
              表示: true、
              ypadding:1
            }
          }、
          axesDefaults:{
            tinyRenderer:$.jqplot.CanvasAxisTickRenderer,
            ティックオプション: {
              角度: -30、
              フォントサイズ: '12px'
            }
          }、
          軸: {
            xaxis: {
              レンダラ: $.jqplot.CategoryAxisRenderer,
              ティック: data.action
            }、
            yaxis: {
              パッド:1.05
            }
          }
        });
      }キャッチ(e){
        //alert(e.message);
      }
    }
  });
}


draws.push('drawUserActionTop10Chart');


/******************************* トップ 10 ユーザーアクション終了 **************** ********************/

/*********** チャート開始 *****************/


//チャート描画関数をここに置きます
//1.チャートの div を挿入
//2.関数描画チャートを実装します
//3.関数名を配列にプッシュします。draws


/*********** チャート終了 *******************/

// すべてのチャートを描画します
vardrawAllCharts = function(){
  for(var i = 0; i     eval(draws[i] "()");
  }


 // 5 分後に呼び出します。
 window.setTimeout(drawAllCharts, 5 * 60 * 1000);
}


//
$(関数(){
  drawAllCharts();
});

サーバー端末とゲスト端末の代価都有了,那就跑起看看効果吧:

良い意味で何を忘れましたか?日志の分析コード。

三、MongoDB 增量式 MapReduce 实现日志分析を使用します

MongoDB のドキュメントには、増分 MapReduce に関するメディアが含まれています。MongoDB がストリーミング処理を実行するために開始され、自動で増量式の MapReduce が実行されます。これは、MapReduce を大量に実行できないように設定する方法を説明するだけです。

便宜上、MapReduce で MongoDB を使用する JavaScript を個別の js ファイルに書き込み、その後 crontab 経由で実行します。stats.js のコード:


复制代码代码如下:

/************** ファイルは /etc/crontab によって 5 分ごとに実行されます。******************/
var action_count_map = function(){
Emit(this.action, {action:this.action, count:1});
}

var action_count_reduce = function(key, value){
var count = 0;
value.forEach(関数(値){
カウント = value.count;
});
戻り値 {アクション:キー, カウント : カウント};
}


db.log.mapReduce(action_count_map, action_count_reduce, {query : {'action_count' : {$ne:1}},out: {reduce:'action_count'}});

db.log.update({'action_count':{$ne:1}}, {$set:{'action_count':1}}, false, true);

アイデアは非常にシンプルです:
1. マップ内の各アクションのアクセス数を 1 に設定します
2.reduce で、同じアクションへの訪問数をカウントします
3.mapReduceを実行します。クエリは「action_count」が 1 に等しくないように指定されます。つまり、統計は実行されていません。結果セットが次のように使用されることを示すために、reduce オプションが使用されます。次のreduceの入力。
4. 現在のすべてのログ レコードの「action_count」の値を 1 に設定し、統計が実行されたことを示します。これにより、まだカウントされていないレコードが更新されることになるのだろうか? ?経験豊富なヒーローが私にアドバイスをくれることを願っています!

stats.js シェルのスケジュールされた実行:

コードをコピー コードは次のとおりです:

*/5 * * * * root cd /root/log; mongo localhost:27017/log stats.js

これがコードのすべてです。特に神秘的なものは何もありませんが、Node.js は本当に優れたものです。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

バックエンド開発における Golang と Node.js の比較 バックエンド開発における Golang と Node.js の比較 Jun 03, 2024 pm 02:31 PM

Go と Node.js には、型指定 (強い/弱い)、同時実行性 (ゴルーチン/イベント ループ)、ガベージ コレクション (自動/手動) の違いがあります。 Go は高スループットと低レイテンシーを備えており、高負荷のバックエンドに適しています。Node.js は非同期 I/O に優れており、高い同時実行性と短いリクエストに適しています。この 2 つの実際のケースには、Kubernetes (Go)、データベース接続 (Node.js)、Web アプリケーション (Go/Node.js) が含まれます。最終的な選択は、アプリケーションのニーズ、チームのスキル、個人の好みによって異なります。

net4.0の用途は何ですか net4.0の用途は何ですか May 10, 2024 am 01:09 AM

.NET 4.0 はさまざまなアプリケーションの作成に使用され、オブジェクト指向プログラミング、柔軟性、強力なアーキテクチャ、クラウド コンピューティングの統合、パフォーマンスの最適化、広範なライブラリ、セキュリティ、スケーラビリティ、データ アクセス、モバイルなどの豊富な機能をアプリケーション開発者に提供します。開発サポート。

DebianでMongoDB自動拡張を構成する方法 DebianでMongoDB自動拡張を構成する方法 Apr 02, 2025 am 07:36 AM

この記事では、自動拡張を実現するためにDebianシステムでMongodbを構成する方法を紹介します。主な手順には、Mongodbレプリカセットとディスクスペース監視のセットアップが含まれます。 1。MongoDBのインストール最初に、MongoDBがDebianシステムにインストールされていることを確認してください。次のコマンドを使用してインストールします。sudoaptupdatesudoaptinstinstall-yymongodb-org2。mongodbレプリカセットMongodbレプリカセットの構成により、自動容量拡張を達成するための基礎となる高可用性とデータ冗長性が保証されます。 Mongodbサービスを開始:Sudosystemctlstartmongodsudosys

DebianでMongodbの高可用性を確保する方法 DebianでMongodbの高可用性を確保する方法 Apr 02, 2025 am 07:21 AM

この記事では、Debianシステムで非常に利用可能なMongoDBデータベースを構築する方法について説明します。データのセキュリティとサービスが引き続き動作し続けるようにするための複数の方法を探ります。キー戦略:レプリカセット:レプリカセット:レプリカセットを使用して、データの冗長性と自動フェールオーバーを実現します。マスターノードが失敗すると、レプリカセットが自動的に新しいマスターノードを選択して、サービスの継続的な可用性を確保します。データのバックアップと回復:MongoDumpコマンドを定期的に使用してデータベースをバックアップし、データ損失のリスクに対処するために効果的な回復戦略を策定します。監視とアラーム:監視ツール(プロメテウス、グラファナなど)を展開して、MongoDBの実行ステータスをリアルタイムで監視し、

MongoDBデータベースパスワードを表示するNAVICATの方法 MongoDBデータベースパスワードを表示するNAVICATの方法 Apr 08, 2025 pm 09:39 PM

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

Pi Coinのメジャーアップデート:Pi Bankが来ています! Pi Coinのメジャーアップデート:Pi Bankが来ています! Mar 03, 2025 pm 06:18 PM

Pinetworkは、革新的なモバイルバンキングプラットフォームであるPibankを立ち上げようとしています! Pinetworkは本日、Pibankと呼ばれるElmahrosa(Face)Pimisrbankのメジャーアップデートをリリースしました。これは、従来の銀行サービスと、フィアット通貨の原子交換と暗号通貨の原子交換を実現します(resuptocursisを使用するなど、聖職者のような聖職者など、 DC)。ピバンクの魅力は何ですか?見つけましょう!ピバンクの主な機能:銀行口座と暗号通貨資産のワンストップ管理。リアルタイムトランザクションをサポートし、生​​物種を採用します

Debian Mongodbでデータを暗号化する方法 Debian Mongodbでデータを暗号化する方法 Apr 12, 2025 pm 08:03 PM

DebianシステムでMongoDBデータベースを暗号化するには、次の手順に従う必要があります。ステップ1:MongoDBのインストール最初に、DebianシステムがMongoDBをインストールしていることを確認してください。そうでない場合は、インストールについては公式のMongoDBドキュメントを参照してください:https://docs.mongodb.com/manual/tutorial/install-mongodb-onedbian/-step 2:暗号化キーファイルを作成し、暗号化キーを含むファイルを作成し、正しい許可を設定します。

Centos Mongodbバックアップ戦略とは何ですか? Centos Mongodbバックアップ戦略とは何ですか? Apr 14, 2025 pm 04:51 PM

MongoDB効率的なバックアップ戦略の詳細な説明CENTOSシステムでは、この記事では、データセキュリティとビジネスの継続性を確保するために、CENTOSシステムにMongoDBバックアップを実装するためのさまざまな戦略を詳細に紹介します。 Dockerコンテナ環境でのマニュアルバックアップ、タイミング付きバックアップ、自動スクリプトバックアップ、バックアップメソッドをカバーし、バックアップファイル管理のベストプラクティスを提供します。マニュアルバックアップ:MongoDumpコマンドを使用して、マニュアルフルバックアップを実行します。たとえば、Mongodump-Hlocalhost:27017-U Username-P Password-Dデータベース名-O/バックアップディレクトリこのコマンドは、指定されたデータベースのデータとメタデータを指定されたバックアップディレクトリにエクスポートします。

See all articles