Logstash:ELKスタック使用してAPI分析

ELKスタックユーザーがいない最も一般的な例の一つでAPIを介してデータを抽出するが、これはいくつかのケースのために非常に有用です。たとえば、REST APIを使用して、商業開発者のためのそのデータベース・サービスは、この分析の目的・インテリジェンス・データに興味があるかもしれませんパッケージ。今日の記事では、分析のためのサービスAPIにELKスタックを使用する方法について説明します。

何らかの理由で、ELKスタックは、APIと統合するための簡単な方法を提供します。これらの方法の一つであるLogstash HTTPポーラー入力プラグ。次の例では、私は公開APIの開示を経由して、いくつかの気象データを取得するには、このプラグインを使用します。

これらの手順を実行し、HTTP API ELK分析するための独自のパイプラインを構築するには、次のように設定する必要があります。

 

データを準備します

前述したように、我々は現在の気象データを収集するためにOpenWeatherMap APIを使用します。データセットは40,000気象観測所から集め、世界中の既存の気象条件に関する統計情報が含まれています。

データ自体はJSON、XMLまたはHTML形式をすることができますが、デフォルトの形式は、我々がElasticsearchインデックスデータを使用しているので、私たちのユースケースに非常に適しているJSON、です。あなたができる、市ID、都市名が提供する電話をかけるには、地理座標または郵便番号(ここではメソッドを使用します) - データを呼び出すには、いくつかの方法があります。また、特定の座標内の複数の都市を呼び出すことができます。

次の例では、緯度と経度の座標を含むバウンディングボックスの天気統計を呼び出します。

http://api.openweathermap.org/data/2.5/box/city?bbox=12,32,15,37,10&appid=YourAppKey

上記では、 BBOXは、 [LON-左、LAT-底として定義さ 、ズーム、LON-右、LATトップ、】 すなわち、それは長方形の面積で表されます。彼らは働くことができる前に、上記のAPPIDでは、我々は自分のアプリのキーを入力する必要があります。

APIが返すデータ、温度、湿度、気圧、風速、風向など、現在の気象条件を測定するために必要なすべての統計情報を提供してくれます。

これは一例です:

{"cod":200,"calctime":0.00256473,"cnt":15,"list":[{"id":2563191,"dt":1581912559,"name":"Birkirkara","coord":{"Lon":14.46,"Lat":35.9},"main":{"temp":8,"feels_like":6.94,"temp_min":8,"temp_max":8,"pressure":1028,"humidity":93},"visibility":10000,"wind":{"speed":0.5},"rain":null,"snow":null,"clouds":{"today":1},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2210247,"dt":1581912558,"name":"Tripoli","coord":{"Lon":13.19,"Lat":32.88},"main":{"temp":14.62,"feels_like":12.78,"temp_min":14.62,"temp_max":14.62,"pressure":1027,"sea_level":1027,"grnd_level":1027,"humidity":59},"wind":{"speed":1.53,"deg":42},"rain":null,"snow":null,"clouds":{"today":12},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}]},{"id":2216885,"dt":1581912558,"name":"Zawiya","coord":{"Lon":12.73,"Lat":32.75},"main":{"temp":10.33,"feels_like":8.14,"temp_min":10.33,"temp_max":10.33,"pressure":1027,"sea_level":1027,"grnd_level":1015,"humidity":77},"wind":{"speed":1.96,"deg":87},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2212771,"dt":1581912558,"name":"Sabratah","coord":{"Lon":12.49,"Lat":32.79},"main":{"temp":14.59,"feels_like":12.27,"temp_min":14.59,"temp_max":14.59,"pressure":1027,"sea_level":1027,"grnd_level":1027,"humidity":57},"wind":{"speed":2.05,"deg":57},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2215163,"dt":1581912558,"name":"Masallatah","coord":{"Lon":14,"Lat":32.62},"main":{"temp":8.75,"feels_like":6.93,"temp_min":8.75,"temp_max":8.75,"pressure":1027,"sea_level":1027,"grnd_level":995,"humidity":77},"wind":{"speed":0.98,"deg":309},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2219905,"dt":1581912558,"name":"Al Khums","coord":{"Lon":14.26,"Lat":32.65},"main":{"temp":12.93,"feels_like":11.96,"temp_min":12.93,"temp_max":12.93,"pressure":1027,"sea_level":1027,"grnd_level":1023,"humidity":71},"wind":{"speed":0.65,"deg":51},"rain":{"3h":0.19},"snow":null,"clouds":{"today":27},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}]},{"id":2208425,"dt":1581912558,"name":"Zuwarah","coord":{"Lon":12.08,"Lat":32.93},"main":{"temp":12.65,"feels_like":10.83,"temp_min":12.65,"temp_max":12.65,"pressure":1027,"sea_level":1027,"grnd_level":1027,"humidity":64},"wind":{"speed":1.3,"deg":63},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2210221,"dt":1581912558,"name":"Tarhuna","coord":{"Lon":13.63,"Lat":32.44},"main":{"temp":7.58,"feels_like":6.11,"temp_min":7.58,"temp_max":7.58,"pressure":1027,"sea_level":1027,"grnd_level":992,"humidity":85},"wind":{"speed":0.56,"deg":142},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2208485,"dt":1581912558,"name":"Zlitan","coord":{"Lon":14.57,"Lat":32.47},"main":{"temp":12.93,"feels_like":11.96,"temp_min":12.93,"temp_max":12.93,"pressure":1027,"sea_level":1027,"grnd_level":1023,"humidity":71},"wind":{"speed":0.65,"deg":51},"rain":{"3h":0.19},"snow":null,"clouds":{"today":27},"weather":[{"id":500,"main":"Rain","description":"light rain","icon":"10n"}]},{"id":2217362,"dt":1581912558,"name":"Gharyan","coord":{"Lon":13.02,"Lat":32.17},"main":{"temp":5.59,"feels_like":4.01,"temp_min":5.59,"temp_max":5.59,"pressure":1027,"sea_level":1027,"grnd_level":940,"humidity":90},"wind":{"speed":0.4,"deg":209},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2523693,"dt":1581912495,"name":"Pozzallo","coord":{"Lon":14.85,"Lat":36.73},"main":{"temp":5.56,"feels_like":2.34,"temp_min":3.89,"temp_max":7.78,"pressure":1028,"humidity":87},"visibility":10000,"wind":{"speed":2.6,"deg":60},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2524119,"dt":1581912495,"name":"Modica","coord":{"Lon":14.77,"Lat":36.85},"main":{"temp":5.73,"feels_like":2.54,"temp_min":3.89,"temp_max":7.78,"pressure":1028,"humidity":87},"visibility":10000,"wind":{"speed":2.6,"deg":60},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2208791,"dt":1581912558,"name":"Yafran","coord":{"Lon":12.53,"Lat":32.06},"main":{"temp":7.01,"feels_like":5.31,"temp_min":7.01,"temp_max":7.01,"pressure":1027,"sea_level":1027,"grnd_level":959,"humidity":84},"wind":{"speed":0.68,"deg":209},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2523581,"dt":1581912494,"name":"Rosolini","coord":{"Lon":14.95,"Lat":36.82},"main":{"temp":5.32,"feels_like":2.06,"temp_min":3.89,"temp_max":7.78,"pressure":1028,"humidity":87},"visibility":10000,"wind":{"speed":2.6,"deg":60},"rain":null,"snow":null,"clouds":{"today":0},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}]},{"id":2523650,"dt":1581912495,"name":"Ragusa","coord":{"Lon":14.72,"Lat":36.93},"main":{"temp":5.52,"feels_like":2.29,"temp_min":3.89,"temp_max":7.78,"pressure":1028,"humidity":87},"visibility":10000,"wind":{"speed":2.6,"deg":60},"rain":null,"snow":null,"clouds":{"today":22},"weather":[{"id":801,"main":"Clouds","description":"few clouds","icon":"02n"}]}]}

 

設定Logstash

方法ELKは、APIによって返されたデータを使用してスタックに導入Logstash HTTPポーラー重合のエンドポイントURLから定義することができる入力でプラグイン、および復号化輸送データ。我々は最初のlogstash_openweathermap.conf名という名前の設定ファイルを作成します。

Logstash入力

使用されるURLエンドポイントのポーリング要求がタイムアウトし、ベースのcronスケジュール(5分ごと)およびコーデック(JSON) - Http_poller入力部は、入力されたプラグを定義します。metadata_target設定はオプションであり、ポーリングのパフォーマンスへの応答に関連するいくつかのフィールドを追加します。

input {
  http_poller {
    urls => {
      url => "http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=7dbe7341764f682c2242e744c4f167b0&units=metric"
    }
    request_timeout => 60
    schedule => { every => "5m"}
    codec => "json"
    metadata_target => "http_poller_metadata"
  }
}

私たちは、URLがここに挿入されたAPIを呼び出した後、以下のクエリパラメータを含めます:

  • Q =ロンドン、uk-は、ロンドンの気象データに戻すように求め
  • APPID = - OpenWeatherMap APIキー
  • 摂氏単位形式に変換する - 単位=メトリック

マイクロサービスのURL上記で示したインタフェースはその結果、それを返すには、次のとおりです。

{
  "coord": {
    "lon": -0.13,
    "lat": 51.51
  },
  "weather": [
    {
      "id": 802,
      "main": "Clouds",
      "description": "scattered clouds",
      "icon": "03n"
    }
  ],
  "base": "stations",
  "main": {
    "temp": 6.7,
    "feels_like": 0.46,
    "temp_min": 5,
    "temp_max": 8.33,
    "pressure": 1006,
    "humidity": 65
  },
  "visibility": 10000,
  "wind": {
    "speed": 6.2,
    "deg": 230
  },
  "clouds": {
    "all": 40
  },
  "dt": 1581916140,
  "sys": {
    "type": 1,
    "id": 1414,
    "country": "GB",
    "sunrise": 1581923520,
    "sunset": 1581959845
  },
  "timezone": 0,
  "id": 2643743,
  "name": "London",
  "cod": 200
}

あなたは使用することができますhttps://jsonformatter.org/json-viewerを APIで返された結果をフォーマットします。

Logstashフィルタ

APIレスポンスJSONを使用するので、Logstashしたがって、ほとんど、あるいは全く分析的治療を必要とします。したがって、我々は今セクションは空白を絞り込むことができます。

filter {}

Logstash出力

この非常に簡単なの以下の部分:

output {
   	elasticsearch {
     	index => "openweather"
     	document_type => "_doc"
     	hosts => "localhost:9200"
	} 
 }

9200のElasticsearchを、インデックス名はopenweatherです:上記において、我々は、ローカルホストにデータを置きます。

上記の構成統合され、私たちの究極のlongstash_openweather.confは、次のように:

input {
  http_poller {
    urls => {
      url => "http://api.openweathermap.org/data/2.5/weather?q=London,uk&APPID=7dbe7341764f682c2242e744c4f167b0&units=metric"
    }
    request_timeout => 60
    schedule => { every => "1m"}
    codec => "json"
    metadata_target => "http_poller_metadata"
  }
}

filter {}

output {
  stdout {
    codec => rubydebug
    }

  elasticsearch {
     	index => "openweather"
     	document_type => "_doc"
     	hosts => "localhost:9200"
  }
}

スタートLogstash。私たちは、logstashのインストールディレクトリにLogstashを実行します。

./bin/logstash -f ~/data/logstash_openweather.conf

あなたは、作成された新しいElasticsearchインデックス気象データの使用が表示されます。分析を開始するにはKibanaで新しいインデックスモデルを定義します。

 

データ分析

私たちは、作成することにより、インデックスパターンopenweatherと呼ばれます。その後、出会うことで表示することができます。

 

openweatherインデックスパターンを使用して、我々はそれを私たちのダッシュボードを行うことができます。

 

 

公開された489元の記事 ウォンの賞賛107 ビュー840 000 +

おすすめ

転載: blog.csdn.net/UbuntuTouch/article/details/104356251