ゴープロジェクトの戦闘:非常に同時ログ収集システムを構築するために(B)

全体的なアイデアは、各フォルダを記録、リアルタイムのアクセスログは、一度書かれ、カフカキューを作成している、キューが高い同時実行でカフカキューを書き、デ結合ロジックの目的を達成することができ、システムログの統計情報を監視することです。そして、データがキューカフカから読み込まれ、Webページに表示したり、コンソールの実際のニーズに応じてのように。

主婦

私たちは、下記の対象に仕上がっ
1つのコンフィギュレーション・カフカ、およびメッセージキューを開始します。
2メッセージエントリにカフカコーディング、およびカフカからメッセージを読み取ります。

このセクションターゲット

メッセージから1つのカフカ書き込みコードは、読み取り正しいカフカメッセージを確実にするために、読み取りと書き込み機能。
正しくファイルとファイルバックアップ機能を記述するときtailfで2は、文書管理を実装し、シミュレーション実験事実。
3シリーズゴー開発言語使用

カフカからのメッセージを読みます

メインFUNC(){ 
	fmt.Println( "消費者始まる...")
	設定:= sarama.NewConfig()
	config.Consumer.Return.Errors = TRUE 
	WG:= sync.WaitGroup {} 
	//创建消费者
	消費者、ERR := sarama.NewConsumer([]ストリング{ "はlocalhost:9092"}、設定)
	!ERR =ゼロ{もし
		fmt.Println( "コンシューマを作成できませんでした、エラーがある"、err.Error())
		リターン
	} 
	延期consumer.Close ()
	
	//パーティション(トピック):该方法返回了该トピック的所有分区ID 
    partitionList、ERR:= consumer.Partitions( "テスト")
    ERR = nilの{もし!
		fmt.Println( "消費者のパーティションが失敗します")
		FMT .Printlnは(ERR、 "エラーです"。エラー()) 
		リターン
    } 
 
	パーティションの:=範囲partitionList {
		// ConsumePartition方法の主題によれば、
		//パーティションと作成し、適切なパーティションコンシューマを作成するために、オフセット与えられた
		消費者は、パーティション情報を返すエラー消費している//場合
		// OffsetNewest最新の消費データ
        ERR、PCを:= consumer.ConsumePartition( "試験」のInt32(パーティション)、sarama.OffsetNewest)
        ERR!=ゼロ{IF 
            パニック(ERR)
		} 
		//近い非同期で、ディスクからデータをことを確実にするために
        延期pc.AsyncClose()
        wg.Add(1)
        移動FUNC(sarama.PartitionConsumer ){ 
            延期wg.Done()
            //メッセージ()メソッドは、読み取り専用メッセージエージェントによって生成されたチャネル消費の種類戻り
            =レンジpc.Messages(){:MSGため
				fmt.Printf(「%S ---パーティション:%のD、オフセット:%のD、キー:%S、値:%S \ N-」、 
				msg.Topic、msg.Partition、msg.Offset、文字列(msg.Key)、文字列( msg.Value))
            } 
        }(PC)
    } 
    wg.Wait()
    consumer.Close()
	
}

  

私たちは、カフカコードデータを達成するために書かれたテキストを実行する前に、それぞれ、飼育係とカフカを開始し、カフカの消費量から現在のコード、次のような結果が表示されたら
1.JPG

実装ファイルを監視

ファイル監視を実施し、メインのコンテンツがファイルに書き込まれると、ファイルのLinuxのコマンドtailf -f関数に似タイムリー書かれた内容を、取得することができます。
次のようにgolangが尾ライブラリを提供し、我々は指定されたファイルの監視を完了するために、このライブラリを使用して、私のファイルが編成されています
4.JPG

 LOGDIRフォルダのlog.txtレコードがログファイルを増加している
tailfフォルダlogtailf.go log.txtと監視を実現します。
WRITEFILEフォルダwritefile.go達成するために、ログlog.txtファイルとバックアップ機能を記述することです。

メインFUNC(){ 
	logrelative:= '../ LOGDIR / log.txt` 
	_、ファイル名、_、_:= runtime.Caller(0)
	fmt.Println(ファイル名)
	データパス:= path.Join(path.Dir(ファイル名)、logrelative)
	fmt.Println(データパス)
	tailFile、ERR:= tail.TailFile(データパス、tail.Config { 
		//ファイルが削除またはパックされ、再オープンする必要があり
		再度開く:真、に
		//リアルタイム追跡
		フォローを:真、
		//プログラムに異常がある場合は、最後の読み取り位置の保存、回避するために、再読み込み
		場所:&tail.SeekInfo {オフセット:0、WHENCE:2}、
		//サポートファイルが存在しない
		MustExistを:偽、
		投票:trueに、
	} )

	IF ERR = nilの{!
		fmt.Println( "ERR尾ファイル:"、ERR)
		リターン
	} 

	{trueにため 
		MSG、OK:= <-tailFile.Lines
		もしOK!{ 
			:( "テールファイルがクローズ再度開く、ファイル名%sの\ n"は、tailFile.Filename)fmt.Printf 
			time.Sleep(100 * time.Millisecond)が
			継続
		} 
		//fmt.Println("msgを:」、MSG )
		//只打印テキスト
		fmt.Println( "MSG:"、msg.Text)
	} 
}

監視の機能をテストします。私たちはライン「こんにちは+タイムスタンプは、」すべての0.1秒で、ログのlog.txtに書き込まれている実感します。私たちは20コンテンツを書くとき、バックアップの名前が変更LOG.TXTます。
そして、書き込みを続ける新しいlog.txtとを作成します。
書き込みwritefile.goのタイミング、およびバックアップ機能で機能を実装

FUNC WRITELOG(データパス文字列){ 
	filew、ERR:= os.OpenFile(データパス、os.O_APPEND | os.O_CREATE | os.O_RDWR、0644)
	の場合、ERR = nilの{!
		fmt.Println( "オープンファイルエラー"、ERR。エラー())
		リターン
	} 

	W:= bufio.NewWriter(filew)
	iについて:= 0; I <20; I ++ { 
		timeStr:= time.Now()フォーマット( "2006年1月2日午後三時04分05秒")
		fmt.Fprintln(+ timeStr "こんにちは、現在の時間がある"、ワット)
		time.Sleep(time.Millisecond * 100 )
		w.Flush()
	} 
	logBak:= time.Now()フォーマット( "20060102150405")+ ".txtファイル" 
	logBak = path.Join(path.Dir(データパス)、logBak)
	filew.Close()
	ERR = OS .Rename(データパス、logBak)
	ERR!= nilの場合{ 
		fmt.Println( "名前の変更エラー"、ERR。
	} 
}

  その後、我々は3つのバックアップファイルが生成されます3回WRITELOGと呼ばれる主な機能を、実現します

FUNCメイン(){ 
	logrelative:= '../ LOGDIR / log.txt` 
	_、ファイル名、_、_:= runtime.Caller(0)
	fmt.Println(ファイル名)
	データパス:= path.Join(path.Dir(ファイル名)、logrelative)
	私のために:= 0; I <3。I ++ { 
		WRITELOG(データパス)
	} 
}

 

私たちは、スタートアップファイル、プログラム・ファイルが書き込まれる監視、次のような効果がある動的監視を実現logtailf.go、コンテンツがlog.txtを書かされたときに、見ることができる、とするとき、ファイルのバックアップ、プロンプトファイルをlogtailf.goの名前が変更されましたバックアップ。最終的に、我々は3つのバックアップファイルに結果を見ます
2.JPG


3.JPG

概要

現在、我々は、我々は、プロジェクトの構成や全体的なコードを実現し、カフカのニュースリーダー、ファイル監視、動的な書き込みとバックアップ機能が完了しました。
ソースのダウンロード
https://github.com/secondtonone1/golang-は
私の社会的関心号に感謝します
wxgzh.jpg

 

おすすめ

転載: www.cnblogs.com/secondtonone1/p/11944360.html