一、下载数据
须先得到数据。可以到网址 kaggle.com 进行下载。该网站含有大量的数据可以供下载。
二、Index CSV 文件到 Elasticsearch
logstash_cars.config 文件的内容如下:
input {
file {
path => "/Users/liuxg/data/cars.csv"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
csv {
skip_header => true
separator => ","
columns => [ "maker", "model", "mileage", "manufacture_year", "engine_displacement",
"engine_power", "body_type", "color_slug", "stk_year", "transmission", "door_count",
"seat_count", "fuel_type", "date_created", "date_last_seen", "price_eur" ]
}
mutate { convert => ["mileage", "integer"] }
mutate { convert => ["price_eur", "float"] }
mutate { convert => ["engine_power", "integer"] }
mutate { convert => ["door_count", "integer"] }
mutate { convert => ["seat_count", "integer"] }
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "cars"
document_type => "sold_cars"
}
stdout {}
}
这里有几点需要说明的:
- 由于第一行有一个 header,所以,我们可以设置 skip_header 为 true 来跳过。
在 input 中,我们定义了一个文件,它的 path 指向我们的 csv 文件的位置。start_position 指向 beginning。如果对于- 一个实时的数据源来说,它通常是 ending,这样表示它每次都是从最后拿到那个数据。sincedb_path 通常指向一个文件。这个文件保存上次操作的位置。针对我们的情况,我们设置为 /dev/null,表明,我们不存储这个数据。 - 在 filter 中,CSV filter 是非常直接的,不太需要很多的解释。这里的 column 都来自于我们的 csv 表格。通常 Logstash 会把每个数据都当做是字符串。针对我们的情况,我们可看到 mileage 是一个整型数,price_eur 是一个浮点数。这些我们都需要进行调整。这个调整我们可以通过 mutate 来完成。
- 在 output 之中,我们制定本地的 Elasticsearch 为我们的数据库,它的 index 是 cars,同时 document_type 为_doc。我们也同时使用 stdout,这样我们可以在 terminal 屏幕中看出数据在处理之中。
三、装载数据到 Elasticsearch
首先进入到 Logstash 的安装目录,然后打入如下的命令:
sudo ./bin/logstash -f ~/data/logstash_cars.config
提示:在运行 Logstash 时使用 -r 标志可让你在更改和保存配置后自动重新加载配置。 在测试新配置时,这将很有用,因为你可以对其进行修改,这样就不必在每次更改配置时都手动启动 Logstash。
然后,可以在屏幕上看到如下的输出:
同时如果这在 Kibana 上可以看到正在 index 的 cars index 数量(count)是一直变化的。
经过一段时间的运行,可以看到屏幕上不再滚动了,表明 Logstash 已经完成了数据的传输。可以在 Kibana 上打入如下的命令:
GET cars/_stats
以看到的 cars Index 的统计数据:
可以看到共有 3,167,984 条数据,并且它的大小有 2.466G 这么大的数据。
可以打入如下的命令:
GET cars
可以看到 Elasticsearch 已经为我们创建好了 mapping,并且它们的数据类型也可以看到:
{
"cars" : {
"aliases" : { },
"mappings" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
...
"color_slug" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"door_count" : {
"type" : "long"
},
"engine_power" : {
"type" : "long"
},
"fuel_type" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"host" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
...
},
"settings" : {
"index" : {
"creation_date" : "1567949013407",
"number_of_shards" : "1",
"number_of_replicas" : "1",
"uuid" : "tYT-XWpFTGiqwn_rMX4S3A",
"version" : {
"created" : "7030099"
},
"provided_name" : "cars"
}
}
}
}
可以看到 door_count 及 engine_power 都已经修改为 long 数据类型了。在默认的情况下已经为我们创建了一个 replica。
四、在 Kibana 上显示数据
五、下载 Apache 例子日志
方法一:
可以到地址 examples/apache_logs at master · elastic/examples · GitHub进行下载。然后存于自己的一个本地目录当中。
方法二:
在本地的目录使用如下的方法:
debian:
wget https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/apache_logs/apache_logs
Mac:
curl -L -O https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/apache_logs/apache_logs
Log 的每条记录有如下的格式:
83.149.9.216 - - [17/May/2015:10:05:03 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-search.png HTTP/1.1" 200 203023 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:43 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
为了能够使得应用正确运行,必须下载一个叫做 apache_template.json 的 tempate 文件,并把这个文件置于和 log 文件同一个目录中。这个文件在如下的 Logstash 的配置中将会被用到。
六、安装 Filebeat
需要使用 Filebeat 来把我们的 log 信息进行读取,并传入到 Elastcsearch 之中。
deb:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-amd64.deb
sudo dpkg -i filebeat-7.3.1-amd64.deb
rpm:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm
sudo rpm -vi filebeat-7.3.1-x86_64.rpm
mac:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-darwin-x86_64.tar.gz
tar xzvf filebeat-7.3.1-darwin-x86_64.tar.gz
brew:
brew tap elastic/tap
brew install elastic/tap/filebeat-full
linux:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.3.1-linux-x86_64.tar.gz
这样 Filebeat 就安装好了。请注意:由于 ELK 迭代比较快,可以把上面的版本 7.3.1 替换成需要的版本即可。先不要运行 Filebeat。
在 Filebeat 的安装目录下,可以创建一个这样的 filebeat_apache.yml 文件,它的内容如下:
filebeat.inputs:
- type: log
enabled: true
paths:
- /Users/liuxg/data/apache_logs
output.logstash:
hosts: ["localhost:5044"]
七、配置 Logstash
最后看到的信息:
{
"input" => {
"type" => "log"
},
"clientip" => "199.16.156.124",
"message" => "199.16.156.124 - - [18/May/2015:14:05:13 +0000] \"GET /files/lumberjack/lumberjack-0.3.0.exe HTTP/1.1\" 200 4378624 \"-\" \"Twitterbot/1.0\"",
"verb" => "GET",
"ecs" => {
"version" => "1.0.1"
},
"httpversion" => "1.1",
"response" => 200,
"timestamp" => "18/May/2015:14:05:13 +0000",
"referrer" => "\"-\"",
"@timestamp" => 2015-05-18T14:05:13.000Z,
"log" => {
"offset" => 780262,
"file" => {
"path" => "/Users/liuxg/data/apache_logs"
}
},
"@version" => "1",
"geoip" => {
"timezone" => "America/Chicago",
"country_code2" => "US",
"ip" => "199.16.156.124",
"country_code3" => "US",
"longitude" => -97.822,
"country_name" => "United States",
"latitude" => 37.751,
"continent_code" => "NA",
"location" => {
"lon" => -97.822,
"lat" => 37.751
}
},
"ident" => "-",
"tags" => [
[0] "beats_input_codec_plain_applied"
],
"bytes" => 4378624,
"host" => {
"name" => "localhost"
},
"agent" => {
"hostname" => "localhost",
"id" => "c88813ba-fdea-4a98-a0be-468fb53566f3",
"ephemeral_id" => "e146fbc1-8073-404e-bc6f-d692cf9303d2",
"type" => "filebeat",
"version" => "7.3.0"
},
"request" => "/files/lumberjack/lumberjack-0.3.0.exe",
"auth" => "-"
}
八、运行 Logstash 及 Filebeat
可以通过如下的方式来运行 Logstash:
./bin/logstash -f ~/data/apache_logstash.conf
这里的 -f 选项用来指定我们的定义的 Logstash 的配置文件。
进入到 Filebeat 的安装目录,并通过如下的命令来执行 Filebeat 的数据采集,并传入到 Logstash 之中:
./filebeat -c filebeat_apache.yml
这里用 -c 选项来指定我们的 Filebeat 的配置文件。
如果想重新运行 filebeat 并重新让 Logstash 处理一遍数据,可以删除 registry 目录:
Filebeat 的 registry 文件存储 Filebeat 用于跟踪上次读取位置的状态和位置信息。
- data/registry 针对 .tar.gz and .tgz 归档文件安装
- /var/lib/filebeat/registry 针对 DEB 及 RPM 安装包
- c:\ProgramData\filebeat\registry 针对 Windows zip 文件
如果想重新运行数据一遍,可以直接到相应的目录下删除那个叫做 registry 的目录即可。针对 .tar.gz 的安装包来说,我们可以直接删除这个文件:
localhost:data liuxg$ pwd
/Users/liuxg/elastic/filebeat-7.3.0-darwin-x86_64/data
localhost:data liuxg$ rm -rf registry/
等删除完这个 regsitry 目录后,再重新运行 filebeat 命令。
output
直接在屏幕上输出点表示进度。同时输出内容到 Elasticsearch。
九、在 Kibana 里查看索引
apache_logs 的数据成功导入到 Elasticsearch 之中。根据我们上面的配置文件,这个索引的名字叫做 apache_elastic_example。我们可以在 Kibana 中查看:
可以建立一个 Index Pattern,并对数据进行分析:
参考资料:
https://blog.csdn.net/UbuntuTouch/article/details/100606857
评论