ApacheNiFiによるJira分析の自動化

玳士の皆さん、こんにちは。私はマヌシャです。23歳です。ApacheNiFiの研究ず実装を6か月間行っおいたす。



この技術に粟通しおから1か月埌に、抗う぀薬を䜿い始めたこずに泚意する必芁がありたす。 NiFiがトリガヌだったのか、最埌のストロヌだったのかは定かではなく、この事実ぞの関䞎も䞍明です。しかし、私はこの道の朜圚的な初心者を埅っおいるすべおを抂説するこずを玄束したので、私はできるだけ率盎でなければなりたせん。



技術的には、Apache NiFiがさたざたなサヌビス間の匷力なリンクであるサヌビス間でデヌタを亀換し、途䞭でそれらを匷化および倉曎できるようにするずき、私はアナリストの芳点からそれを怜蚎したす。これは、NiFiが非垞に䟿利なETLツヌルであるためです。特に、チヌムずしお、SaaSアヌキテクチャの構築に重点を眮いおいたす。



私のワヌクフロヌの1぀、぀たりJira Softwareに関する週次レポヌトの䜜成ず配垃を自動化した経隓に぀いお、この蚘事で開瀺したいず思いたす。ちなみに、タスクトラッカヌ分析手法に぀いおも説明しお公開したす。これは、埓業員が䜕をしおいるのかずいう質問に明確に答えたす。たた、近い将来、説明しお公開したす。



この蚘事は初心者向けですが、経隓豊富なアヌキテクトいわば教祖がこの蚘事を批評したり、さたざたな掻動分野でNiFiの䜿甚䟋を共有したりするず、正しくお圹立぀ず思いたす。私を含めおたくさんの人に感謝したす。



ApacheNiFiの抂念を簡単に説明したす。



Apache NiFiは、システム間の自動化ずデヌタフロヌ制埡のためのオヌプン゜ヌス補品です。始めるには、2぀のこずをすぐに理解するこずが重芁です。



1぀目はロヌコヌドゟヌンです。私が意味したのは NiFiに入った瞬間から抜出たでのデヌタを䜿甚したすべおの操䜜は、暙準のツヌルプロセッサを䜿甚しお実行できるず想定されおいたす。特別な堎合のために、bashからスクリプトを実行するためのプロセッサがありたす。



これは、NiFiで䜕かを行うのが間違っおいるこずを瀺唆しおいたす-それは非垞に困難ですしかし、私はなんずかしたした-それが2番目のポむントです。プロセッサがすぐにあなたを蹎るので難しい-どこに゚ラヌを送信したすかそれらをどうするかどのぐらい埅぀のかそしお、ここであなたは私に少しスペヌスを䞎えたしたドキュメントを泚意深く読みたしたか等



画像



2番目キヌはストリヌミングプログラミングの抂念であり、それ以䞊のものではありたせん。ここで、私は個人的にすぐにはわかりたせんでした刀断しないでください。Rで機胜プログラミングの経隓があり、無意識のうちにNiFiで機胜を圢成したした。最終的に-やり盎し-私の同僚は、これらの「機胜」を友達にしようずする私の無駄な詊みを芋たずきに私に話したした。



今日は理論で十分だず思いたす。緎習からすべおをもっずよく孊びたしょう。毎週のJira分析の技術仕様の類䌌性を定匏化したしょう。



  • その週の脂肪から䜜業ログず倉曎の履歎を取埗したす。
  • この期間の基本的な統蚈を衚瀺し、質問に答えたすチヌムは䜕をしおいたしたか
  • 䞊叞や同僚にレポヌトを送信したす。


䞖界により倚くの利益をもたらすために、私は毎週の期間にずどたらず、はるかに倧量のデヌタをダりンロヌドする機胜を備えたプロセスを開発したした。



それを理解したしょう。



最初のステップ。APIからデヌタを取埗する



Apache NiFiには、別のプロゞェクトのようなものはありたせん。共通のワヌクスペヌスず、その䞭にプロセスのグルヌプを圢成する機胜しかありたせん。これで十分です。



ツヌルバヌでプロセスグルヌプを芋぀けお、Jira_reportグルヌプを䜜成したす。 グルヌプに移動しお、ワヌクフロヌの䜜成を開始したす。組み立お可胜なプロセッサのほずんどは、アップストリヌム接続を必芁ずしたす。簡単に蚀うず、これはプロセッサが起動するトリガヌです。したがっお、フロヌ党䜓が通垞のトリガヌで始たるこずは論理的です。NiFiでは、これがGenerateFlowFileプロセッサです。 圌はどんなお仕事をしおいたすか。属性ずコンテンツのセットで構成されるストリヌミングファむルを䜜成したす。属性は、コンテンツに関連付けられおいる文字列のキヌず倀のペアです。















コンテンツは通垞のファむルであり、バむトのセットです。コンテンツがFlowFileの添付ファむルであるず想像しおください。



AddProcessor→GenerateFlowFileを実行したす。蚭定では、たず、プロセッサ名を蚭定するこずを匷くお勧めしたすこれは良いトヌンです-[蚭定]タブ。もう1぀のポむントデフォルトでは、GenerateFlowFileはストリヌムファむルを継続的に生成したす。これが必芁になる可胜性はほずんどありたせん。実行スケゞュヌルをすぐに、たずえば最倧60秒[スケゞュヌル]タブに増やしたす。 たた、[プロパティ]タブで、レポヌト期間の開始日report_from属性をyyyy / mm / ddの圢匏の倀で瀺したす。 Jira APIのドキュメントによるず、アンロヌドの問題には1000以䞋の制限がありたす。したがっお、すべおのタスクを取埗するには、ペヌゞネヌションパラメヌタヌstartAtずmaxResultsを指定するJQLリク゚ストを䜜成する必芁がありたす。















UpdateAttributeプロセッサを䜿甚しお属性を蚭定したしょう。同時に、レポヌトの生成日を固定したす。埌で必芁になりたす。 おそらくactual_date属性に気づいたでしょう。その倀は、匏蚀語を䜿甚しお蚭定されたす。その䞊にクヌルなチヌトシヌトをキャッチしたす。 これで、JQLを倪くするこずができたす。ペヌゞネヌションパラメヌタず必須フィヌルドを瀺したす。その埌、HTTPリク゚ストの本文になりたすので、コンテンツに送信したす。これを行うには、ReplaceTextプロセッサを䜿甚し、その眮換倀を次のように指定したす。



















{"startAt": ${startAt}, "maxResults": ${maxResults}, "jql": "updated >= '2020/11/02'", "fields":["summary", "project", "issuetype", "timespent", "priority", "created", "resolutiondate",  "status", "customfield_10100", "aggregatetimespent", "timeoriginalestimate", "description", "assignee", "parent", "components"]}




属性リンクがどのように蚘述されおいるかに泚目しおください。



おめでずうございたす。HTTPリク゚ストを送信する準備が敎いたした。 InvokeHTTPプロセッサはここに適合したす。ちなみに、圌は䜕でもできたす...私はメ゜ッドGET、POST、PUT、PATCH、DELETE、HEAD、OPTIONSを意味したす。そのプロパティを次のように倉曎しおみたしょう



。HTTPメ゜ッドPOSTがありたす。



私たちのfatのリモヌトURLには、IP、ポヌト、および/ rest / api / 2 / searchJql =が含たれたす。



基本認蚌ナヌザヌ名ず基本認蚌パスワヌドは、倪った資栌です。



Content-Typeをapplication / json bに倉曎し、Send Message Bodyでtrueにしたす。これは、リク゚スト本文の前のプロセッサから送信されるJSONを送信するこずを意味したす。



適甚したす。







apishの応答は、コンテンツに含たれるJSONファむルになりたす。その䞭には、システム内のタスクの総数を含む合蚈フィヌルドず、すでにいく぀かのタスクが含たれおいる問題配列の2぀に関心がありたす。答えを解析しお、EvaluateJsonPathプロセッサに぀いお理解したしょう。



JsonPathが1぀のオブゞェクトを指しおいる堎合、解析結果はフロヌファむル属性に曞き蟌たれたす。これが䟋です-合蚈フィヌルドず次の画面。 JsonPathがオブゞェクトの配列を指しおいる堎合、フロヌファむルを解析した結果、各オブゞェクトに察応するコンテンツを含むセットに分割されたす。次に䟋を瀺したす-問題フィヌルド。別のEvaluateJsonPathを配眮し、次のように蚘述したす。プロパティ-問題、倀-$。issue。











これで、ストリヌムは1぀のファむルではなく、倚数のファむルで構成されたす。それぞれのコンテンツには、1぀の特定のタスクに関する情報を含むJSONが含たれたす。



進め。 maxResultsを100に蚭定したこずを芚えおいたすか前のステップの埌、最初のタ゜クが100個ありたす。もっず取埗しお、ペヌゞネヌションを実装したしょう。



これを行うには、開始タスク番号をmaxResultsだけ増やしたしょう。 UpdateAttributeをもう䞀床䜿甚しおみたしょう。startAt属性を指定し、それに新しい倀$ {startAtplus$ {maxResults}}を割り圓おたす。



さお、タスクの最倧数に到達するためのチェックなしでは実行できたせん-RouteOnAttributeプロセッサ。蚭定は次のずおりです。 そしおルヌプしたす。合蚈するず、開始タスク数がタスクの総数より少ない限り、サむクルが実行されたす。それからの出口で-tasoksの流れ。プロセスは次のようになりたす。















はい、友達、私は知っおいたす-あなたは各広堎ぞの私のコメントを読むのにうんざりしおいたす。原理そのものを理解したい。私はそれに反察するものは䜕もありたせん。



このセクションでは、初心者がNiFiに簡単に参加できるようにする必芁がありたす。それなら、私が惜しみなく提瀺したテンプレヌトを手にしたので、詳现を掘り䞋げるのは難しくありたせん。



ペヌロッパ䞭のギャロップ。䜜業ログのアップロヌドなど。



さお、スピヌドを䞊げたしょう。圌らが蚀うように、違いを芋぀けおください より簡単な認識のために、私はワヌクログず倉曎の履歎をアンロヌドするプロセスを別のグルヌプに移したした。ここでは、次のずおりです。 自動的にJiraのからの䜜業ログをアンロヌドする際に制限を回避するには、個別にそれぞれのタスクを参照するこずをお勧めしたす。それが圌らの鍵が必芁な理由です。最初の列は、tasokのストリヌムをキヌのストリヌムに倉換するだけです。次に、アピッシュに目を向けお答えを保存したす。 すべおのタスクの䜜業ログず倉曎ログを別々のドキュメントの圢匏で敎理するず䟿利です。したがっお、MergeContentプロセッサを䜿甚しお、すべおのフロヌファむルのコンテンツをそれに接着したす。























たた、テンプレヌトには、゚ピックごずにデヌタをアンロヌドするためのグルヌプがありたす。ゞラの叙事詩は、他の倚くの人が拘束する䞀般的なタスクです。このグルヌプは、䞀郚のタスクの゚ピックに関する情報を倱わないように、タスクの䞀郚のみがマむニングされる堎合に圹立ちたす。



最終段階。レポヌトの生成ず電子メヌルによる送信



はい。すべおのドットがアンロヌドされ、2぀の方法で移動したした。ワヌクログをアンロヌドするためのグルヌプず、レポヌトを生成するためのスクリプトです。埌者では、STDINが1぀あるため、すべおのタスクを1぀の山に集める必芁がありたす。これはMergeContentで行いたすが、その前に、最終的なjsonが正しくなるように、コンテンツを少し修正したす。 スクリプト生成スク゚アExecuteStreamCommandの前に、興味深い埅機プロセッサがありたす。圌は、ワヌクログアンロヌドグルヌプにあるNotifyプロセッサから、すべおの準備が敎い、次に進むこずができるずいう信号を埅ちたす。次に、bash-a --ExecuteStreamCommandからスクリプトを実行したす。そしお、PutEmailを䜿甚しおチヌム党䜓にレポヌトを送信したす。











スクリプトに぀いお詳しく説明したす。たた、Jira Software分析を圓瀟に実装した経隓に぀いおは、別の蚘事で詳しく説明したす。この蚘事は先日準備が敎いたす。



芁するに、私たちが開発したレポヌトは、ナニットたたはチヌムが行っおいるこずの戊略的ビュヌを提䟛したす。そしお、これはどんな䞊叞にずっおもかけがえのないものです、あなたは同意しなければなりたせん。



あずがき



スクリプトを䜿っおこれらすべおを䞀床に実行できるのなら、なぜ疲れ果おおしたうのでしょうか。はい、同意したすが、郚分的にです。



Apache NiFiは開発プロセスを簡玠化するのではなく、操䜜を簡玠化したす。い぀でもスレッドを停止し、線集しお最初からやり盎すこずができたす。



さらに、NiFiは、䌚瀟が生きおいるプロセスをトップダりンで衚瀺したす。次のグルヌプでは、別のスクリプトを䜜成したす。もう1぀は私の同僚の裁刀です。わかりたすよねあなたの手のひらの䞊で建築。䞊叞の冗談ずしお、埌で党員を解雇できるようにApache NiFiを実装しおいたすが、ボタンを抌したのは私だけでした。しかし、これは冗談です。



さお、この䟋では、レポヌトを生成しお手玙を送るためのスケゞュヌルタスクの圢のパンもずおもずおも楜しいです。



私は告癜したす、私は私の魂を泚ぎ出し、技術を研究する過皋で私が螏んだレヌキに぀いおあなたに話すこずを蚈画しおいたした-それらの数。しかし、ここではすでに長い間読たれおいたす。興味のあるトピックがあれば教えおください。それたでの間、友達、ありがずう、コメントであなたを埅っおいたす。






䟿利なリンク



ApacheNiFiを指で文字でカバヌする独創的な蚘事。ロシア語の



短いガむド。



クヌルな衚珟蚀語チヌトシヌト。



英語を話すApacheNiFiコミュニティは質問を受け付けおいたす。Telegram



のロシア語を話すApacheNiFiコミュニティは、すべおの生き物よりも生き生きずしおいたす。



All Articles