기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
윈도 플러그인용 Kinesis 에이전트 생성
대부분의 경우, 마이크로소프트 윈도우용 Amazon Kinesis 에이전트 플러그인을 생성할 필요가 없습니다. Windows용 Kinesis 에이전트는 고도로 구성할 수 있으며 다음과 같은 강력한 소스 및 싱크가 포함되어 있습니다.DirectorySource및KinesisStream이며 대부분의 시나리오에 충분합니다. 기존 소스 및 싱크에 대한 자세한 내용은 단원을 참조하십시오.마이크로소프트 윈도우용 Amazon Kinesis 에이전트 구성.
비정상적인 시나리오의 경우 사용자 지정 플러그인을 사용하여 Windows용 Kinesis 에이전트를 확장해야 할 수 있습니다. 몇 가지 이러한 시나리오는 다음과 같습니다.
-
컴플렉스 패키징
DirectorySource를 사용하여 선언을Regex또는Delimited레코드 파서를 사용하여 다양한 종류의 구성 파일에 쉽게 적용 할 수 있습니다. -
파일 기반이 아니거나 기존 레코드 파서가 제공하는 구문 분석 기능을 초과하는 새로운 소스를 만듭니다.
-
현재 지원되지 않는 AWS 서비스용 싱크 생성
주제
윈도 플러그인용 Kinesis 에이전트 시작하기
사용자 정의 플러그인에는 특별한 것이 없습니다. 기존의 모든 소스 및 싱크는 사용자 정의 플러그인이 Windows용 Kinesis 에이전트가 시작될 때 로드하는 데 사용하는 것과 동일한 메커니즘을 사용하며appsettings.json구성 파일을 참조하십시오.
Windows용 Kinesis 에이전트가 시작되면 다음 순서가 발생합니다.
-
Windows용 Kinesis 에이전트는 설치 디렉토리 (
%PROGRAMFILES%\Amazon\AWSKinesisTap) 를 구현 하는 클래스에 대 한IFactory<T>인터페이스에 정의 된Amazon.KinesisTap.Core어셈블리를 생성합니다. 이 인터페이스는Amazon.KinesisTap.Core\Infrastructure\IFactory.cs를 Windows용 Kinesis 에이전트 소스 코드에 입력합니다. -
Windows용 Kinesis 에이전트는 이러한 클래스를 포함하는 어셈블리를 로드하고
RegisterFactory메서드를 호출합니다. -
Windows용 Kinesis 에이전트는
appsettings.json구성 파일을 참조하십시오. 구성 파일의 각 소스 및 싱크에 대해SourceType및SinkType키-값 페어가 검사됩니다. 의 값과 같은 이름으로 등록 된 공장이있는 경우SourceType및SinkType키-값 페어의 경우CreateInstance메서드가 해당 팩토리에서 호출됩니다. 이CreateInstance메서드는 구성 및 기타 정보를IPluginContext객체입니다. 이CreateInstance메소드는 플러그인을 구성하고 초기화하는 것을 담당합니다.
플러그인이 올바르게 작동하려면 플러그인을 생성하는 등록 된 팩토리 클래스가 있어야하며 플러그인 클래스 자체를 정의해야합니다.
Windows용 Kinesis 에이전트 소스 코드는https://github.com/awslabs/kinesis-agent-windows
Windows 플러그인 팩토리를 위한 Kinesis 에이전트 구현
다음 단계에 따라 Windows용 Kinesis 에이전트 플러그인 팩토리를 구현합니다.
Windows용 Kinesis 에이전트 플러그인 팩토리를 생성하려면
-
.NET Framework 4.6을 대상으로 C# 라이브러리 프로젝트를 생성합니다.
-
를 참조할 항목을 추가합니다.
Amazon.KinesisTap.Core어셈블리를 생성합니다. 이 어셈블리는%PROGRAMFILES%\Amazon\AWSKinesisTap디렉터리에 설치할 수 있습니다. -
NuGet를 사용하여Microsoft.Extensions.Configuration.Abstractions패키지를 설치합니다. -
NuGet를 사용하여System.Reactive패키지를 설치합니다. -
NuGet를 사용하여Microsoft.Extensions.Logging패키지를 설치합니다. -
다음 중 하나를 구현하는 팩토리 클래스를 만듭니다.
IFactory<IEventSource>소스 또는IFactory<IEventSink>싱크 용. 를 추가합니다.RegisterFactory및CreateInstance메서드를 사용합니다.예를 들어 다음 코드에서는 임의의 데이터를 생성하는 소스를 생성하는 Windows용 Kinesis 에이전트 플러그인 팩토리를 생성합니다.
using System; using Amazon.KinesisTap.Core; using Microsoft.Extensions.Configuration; namespace MyCompany.MySources { public class RandomSourceFactory : IFactory<ISource> { public void RegisterFactory(IFactoryCatalog<ISource> catalog) { catalog.RegisterFactory("randomsource", this); } public ISource CreateInstance(string entry, IPlugInContext context) { IConfiguration config = context.Configuration; switch (entry.ToLower()) { case "randomsource": string rateString = config["Rate"]; string maxString = config["Max"]; TimeSpan rate; int max; if (string.IsNullOrWhiteSpace(rateString)) { rate = TimeSpan.FromSeconds(30); } else { if (!TimeSpan.TryParse(rateString, out rate)) { throw new Exception($"Rate {rateString} is invalid for RandomSource."); } } if (string.IsNullOrWhiteSpace(maxString)) { max = 1000; } else { if (!int.TryParse(maxString, out max)) { throw new Exception($"Max {maxString} is invalid for RandomSource."); } } return new RandomSource(rate, max, context); default: throw new ArgumentException($"Source {entry} is not recognized.", entry); } } } }이
switch문에 사용되는CreateInstance메서드를 사용하면 결국 팩토리를 향상시켜 다른 종류의 인스턴스를 만들 수 있습니다.아무 것도하지 않는 싱크를 만드는 싱크 팩토리를 만들려면 다음과 유사한 클래스를 사용하십시오.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Amazon.KinesisTap.Core; using Microsoft.Extensions.Configuration; namespace MyCompany.MySinks { public class NullSinkFactory : IFactory<IEventSink> { public void RegisterFactory(IFactoryCatalog<IEventSink> catalog) { catalog.RegisterFactory("nullsink", this); } public IEventSink CreateInstance(string entry, IPlugInContext context) { IConfiguration config = context.Configuration; switch (entry.ToLower()) { case "nullsink": return new NullSink(context); default: throw new Exception("Unrecognized sink type {entry}."); } } } }
Windows 플러그인 소스용 Kinesis 에이전트 구현
다음 단계에 따라 Windows용 Kinesis 에이전트 플러그인 소스를 구현합니다.
Windows용 Kinesis 에이전트 플러그인 소스를 생성하려면
-
를 구현하는 클래스를 추가합니다.
IEventSource<out T>인터페이스를 원본에 대해 이전에 생성 된 프로젝트에 추가합니다.예를 들어, 다음 코드를 사용하여 임의의 데이터를 생성하는 원본을 정의합니다.
using System; using System.Reactive.Subjects; using System.Timers; using Amazon.KinesisTap.Core; using Microsoft.Extensions.Logging; namespace MyCompany.MySources { public class RandomSource : EventSource<RandomData>, IDisposable { private TimeSpan _rate; private int _max; private Timer _timer = null; private Random _random = new Random(); private ISubject<IEnvelope<RandomData>> _recordSubject = new Subject<IEnvelope<RandomData>>(); public RandomSource(TimeSpan rate, int max, IPlugInContext context) : base(context) { _rate = rate; _max = max; } public override void Start() { try { CleanupTimer(); _timer = new Timer(_rate.TotalMilliseconds); _timer.Elapsed += (Object source, ElapsedEventArgs args) => { var data = new RandomData() { RandomValue = _random.Next(_max) }; _recordSubject.OnNext(new Envelope<RandomData>(data)); }; _timer.AutoReset = true; _timer.Enabled = true; _logger?.LogInformation($"Random source id {this.Id} started with rate {_rate.TotalMilliseconds}."); } catch (Exception e) { _logger?.LogError($"Exception during start of RandomSource id {this.Id}: {e}"); } } public override void Stop() { try { CleanupTimer(); _logger?.LogInformation($"Random source id {this.Id} stopped."); } catch (Exception e) { _logger?.LogError($"Exception during stop of RandomSource id {this.Id}: {e}"); } } private void CleanupTimer() { if (_timer != null) { _timer.Enabled = false; _timer?.Dispose(); _timer = null; } } public override IDisposable Subscribe(IObserver<IEnvelope<RandomData>> observer) { return this._recordSubject.Subscribe(observer); } public void Dispose() { CleanupTimer(); } } }이 예에서는
RandomSource클래스에서 상속EventSource<T>클래스를 제공하기 때문에Id속성입니다. 이 예제에서는 책갈피를 지원하지 않지만 이 기본 클래스는 해당 기능을 구현하는 데에도 유용합니다. 봉투는 메타 데이터를 저장하고 싱크로 스트리밍하기 위해 임의의 데이터를 래핑하는 방법을 제공합니다. 이RandomData클래스는 다음 단계에서 정의되며 이 소스의 출력 객체 유형을 나타냅니다. -
원본에서 스트리밍되는 데이터가 들어 있는 이전에 정의된 프로젝트에 클래스를 추가합니다.
예를 들어, 랜덤 데이터에 대한 컨테이너는 다음과 같이 정의 될 수 있습니다.
namespace MyCompany.MySources { public class RandomData { public int RandomValue { get; set; } } } -
이전에 정의 된 프로젝트를 컴파일하십시오.
-
어셈블리를 Windows용 Kinesis 에이전트의 설치 디렉터리에 복사합니다.
-
생성 또는 업데이트
appsettings.json구성 파일을 열고 Windows용 Kinesis 에이전트의 설치 디렉토리에 저장합니다. -
Windows용 Kinesis 에이전트를 중지했다가 시작합니다.
-
현재 Windows용 Kinesis 에이전트 로그 파일 (일반적으로
%PROGRAMDATA%\Amazon\AWSKinesisTap\logs디렉토리) 를 사용하여 사용자 정의 소스 플러그인에 문제가 없는지 확인하십시오. -
데이터가 원하는 AWS 서비스에 도착하는지 확인합니다.
를 확장하는 방법의 예는 단원을 참조하십시오.DirectorySource기능을 사용하여 특정 로그 형식의 구문 분석을 구현하는 방법에 대한 자세한 내용은Amazon.KinesisTap.Uls\UlsSourceFactory.cs및Amazon.KinesisTap.Uls\UlsLogParser.cs를 Windows용 Kinesis 에이전트 소스 코드에 입력합니다.
책갈피 기능을 제공하는 소스를 생성하는 방법의 예제는 단원을 참조하십시오.Amazon.KinesisTap.Windows\WindowsSourceFactory.cs및Amazon.KinesisTap.Windows\EventLogSource.cs를 Windows용 Kinesis 에이전트 소스 코드에 입력합니다.
Windows 플러그인 싱크용 Kinesis 에이전트 구현
다음 단계에 따라 Windows용 Kinesis 에이전트 플러그인 싱크를 구현합니다.
Windows용 Kinesis 에이전트 플러그인 싱크를 만들려면
-
구현 하는 이전에 정의 된 프로젝트에 클래스를 추가
IEventSink인터페이스를 구현해야 합니다.예를 들어, 다음 코드는 다음 폐기되는 레코드의 도착을 기록 이외의 아무것도하지 않는 싱크를 구현합니다.
using Amazon.KinesisTap.Core; using Microsoft.Extensions.Logging; namespace MyCompany.MySinks { public class NullSink : EventSink { public NullSink(IPlugInContext context) : base(context) { } public override void OnNext(IEnvelope envelope) { _logger.LogInformation($"Null sink {Id} received {GetRecord(envelope)}."); } public override void Start() { _logger.LogInformation($"Null sink {Id} starting."); } public override void Stop() { _logger.LogInformation($"Null sink {Id} stopped."); } } }이 예에서는
NullSink싱크 클래스는 상속EventSink클래스는 레코드를 JSON 및 XML과 같은 다른 직렬화 형식으로 변환하는 기능을 제공하기 때문입니다. -
이전에 정의 된 프로젝트를 컴파일하십시오.
-
어셈블리를 Windows용 Kinesis 에이전트의 설치 디렉터리에 복사합니다.
-
생성 또는 업데이트
appsettings.json구성 파일을 찾아 Windows용 Kinesis 에이전트의 설치 디렉토리에 저장합니다. 예를 들어 를 사용합니다.RandomSource및NullSink사용자 정의 플러그인을 사용할 수 있습니다.appsettings.json구성 파일:{ "Sources": [ { "Id": "MyRandomSource", "SourceType": "RandomSource", "Rate": "00:00:10", "Max": 50 } ], "Sinks": [ { "Id": "MyNullSink", "SinkType": "NullSink", "Format": "json" } ], "Pipes": [ { "Id": "MyRandomToNullPipe", "SourceRef": "MyRandomSource", "SinkRef": "MyNullSink" } ] }이 구성은의 인스턴스를 보내는 소스를 만듭니다
RandomData와RandomValue10초마다 0에서 50 사이의 임의 숫자로 설정됩니다. 들어오는 것을 변형시키는 싱크를 만듭니다.RandomData인스턴스를 JSON으로 변환하고 해당 JSON을 기록한 다음 인스턴스를 삭제합니다. 두 예제 팩토리를 모두 포함해야 합니다.RandomSource소스 클래스 및NullSink싱크 클래스를 사용하여 예제 구성 파일을 사용할 수 있습니다. -
Windows용 Kinesis 에이전트를 중지했다가 시작합니다.
-
현재 Windows용 Kinesis 에이전트 로그 파일 (일반적으로
%PROGRAMDATA%\Amazon\AWSKinesisTap\logs디렉토리) 를 사용하여 사용자 정의 싱크 플러그인에 문제가 없는지 확인하십시오. -
데이터가 원하는 AWS 서비스에 도착하는지 확인합니다. 예가 있기 때문에
NullSink가 AWS 서비스로 스트리밍되지 않는 경우 레코드가 수신되었음을 나타내는 로그 메시지를 찾아 싱크의 올바른 작동을 확인할 수 있습니다.예를 들어 다음과 유사한 로그 파일을 볼 수 있습니다.
2018-10-18 12:36:36.3647 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.AWS.AWSEventSinkFactory. 2018-10-18 12:36:36.4018 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.Windows.PerformanceCounterSinkFactory. 2018-10-18 12:36:36.4018 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory MyCompany.MySinks.NullSinkFactory. 2018-10-18 12:36:36.6926 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.Core.DirectorySourceFactory. 2018-10-18 12:36:36.6926 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.ExchangeSource.ExchangeSourceFactory. 2018-10-18 12:36:36.6926 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.Uls.UlsSourceFactory. 2018-10-18 12:36:36.6926 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.Windows.WindowsSourceFactory. 2018-10-18 12:36:36.6926 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory MyCompany.MySources.RandomSourceFactory. 2018-10-18 12:36:36.9601 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.Core.Pipes.PipeFactory. 2018-10-18 12:36:37.4694 Amazon.KinesisTap.Hosting.LogManager INFO Registered factory Amazon.KinesisTap.AutoUpdate.AutoUpdateFactory. 2018-10-18 12:36:37.4807 Amazon.KinesisTap.Hosting.LogManager INFO Performance counter sink started. 2018-10-18 12:36:37.6250 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink starting. 2018-10-18 12:36:37.6250 Amazon.KinesisTap.Hosting.LogManager INFO Connected source MyRandomSource to sink MyNullSink 2018-10-18 12:36:37.6333 Amazon.KinesisTap.Hosting.LogManager INFO Random source id MyRandomSource started with rate 10000. 2018-10-18 12:36:47.8084 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":14}. 2018-10-18 12:36:57.6339 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":5}. 2018-10-18 12:37:07.6490 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":9}. 2018-10-18 12:37:17.6494 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":47}. 2018-10-18 12:37:27.6520 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":25}. 2018-10-18 12:37:37.6676 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":21}. 2018-10-18 12:37:47.6688 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":29}. 2018-10-18 12:37:57.6700 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":22}. 2018-10-18 12:38:07.6838 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":32}. 2018-10-18 12:38:17.6848 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":12}. 2018-10-18 12:38:27.6866 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":46}. 2018-10-18 12:38:37.6880 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":48}. 2018-10-18 12:38:47.6893 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":39}. 2018-10-18 12:38:57.6906 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":18}. 2018-10-18 12:39:07.6995 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":6}. 2018-10-18 12:39:17.7004 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":0}. 2018-10-18 12:39:27.7021 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":3}. 2018-10-18 12:39:37.7023 Amazon.KinesisTap.Hosting.LogManager INFO Null sink MyNullSink received {"RandomValue":19}.
AWS 서비스에 액세스하는 싱크를 만드는 경우 유용한 기본 클래스가 있습니다. 사용하는 싱크의 경우AWSBufferedEventSink기본 클래스에 대한 자세한 내용은Amazon.KinesisTap.AWS\CloudWatchLogsSink.cs를 Windows용 Kinesis 에이전트의 소스 코드에 입력하십시오.