需求分析
日志是作为线上系统排错的关键,通常我们在本机代码调试的时候,错误会直接打印在控制台上,因此我们才能进行错误的判断。当系统运行在线上的时候,如果单纯的通过捕获异常 ,使用**e.printStackTrace()**进行打印肯定是不行的。因为其他的运行信息或者异常也会将打印的信息给顶掉。
这个时候我们就需要引入日志系统了,这里就不在赘述如何打印日志了。
上述这种情况是在单机版的情况下正常运行,这个时候我们的日志是可以正常的进行查看。但是,当我们开始做分布式,做微服务的时候,单机版的日志系统对于这种情况就不适用了。、
此时此刻,日志记录在多个服务器的log文件当中,而对于我们来说排错就变得异常困难了。因为一个服务可能做了集群之后,生成的日志文件还需要去查看在哪个服务器,对于开发的排错来说大大降低了效率。
显然,此时此刻我们需要一个分布式的日志管理系统,对所有的日志进行统一的管理。
分布式日志系统ELK是指Elasticsearch+Logstash+Kibana。Elasticsearch是一个开源的全文检索工具用于日志存储,Logstash是一个日志收集工具。Kibana用于日志查询与展示。下面是系统简单架构图。
ELK的架构体系十分的简单,首先Logstash通过读取数据源中的数据,进行过滤,然后在输出到ElasticSearch当中去。接着使用Kibbna进行日志的查看。
Logstash的数据源及输出源是多种多样的,数据源可以有Redis,日志文件,数据库等,输出源也一样。在这里我们以文件为案列进行讲解。
环境准备
软件 | 版本 |
---|---|
elasticsearch | 6.7.0 |
kibana- | 6.7.0 |
logstash | 6.7.0 |
注意:这里使用的所有版本都是Windows系统下的,并非Linux系统。
ElasticSearch启动
在解压缩后的elasticsearch-6.7.0目录下找到bin/elasticsearch.bat双击启动即可,无需改动任何配置。如遭遇到内存大小不够等其他原因可自行百度解决。
可以访问http://localhost:9200/,出现下列JSON代表启动成功!
{
"name" : "MjlzdTX",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "EgG3WpR8QxqVrGqidCbB-A",
"version" : {
"number" : "6.7.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "8453f77",
"build_date" : "2019-03-21T15:32:29.844721Z",
"build_snapshot" : false,
"lucene_version" : "7.7.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
Kibana启动
在启动Kibana之前,需要修改yml文件,选择你需要监听的ElasticSearch的端口号。
打开kibana-6.7.0-windows-x86_64\config下的kibana.yml文件,找到下面这段代码取消注释。
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: "http://localhost:9200"
修改完成后只需要访问kibana-6.7.0-windows-x86_64\bin下的kibana.bat文件,双击启动。
接着访问http://localhost:5601,如果进入下面页面代表启动成功
Logstash启动
这里以https://grouplens.org/datasets/movielens/的
文件为例子,点击下载存放到自己的磁盘当中去。
在logstash-6.7.0\bin的目录下新建一个conf文件,命名为stdin.conf文件。文件内容如下:
input {
file {
path => ["F:/data/ml-latest-small/movies.csv"]
start_position => "beginning"
sincedb_path => "nul"
}
}
filter {
csv {
separator => ","
columns => ["id","content","genre"]
}
mutate {
split => { "genre" => "|" }
remove_field => ["path", "host","@timestamp","message"]
}
mutate {
split => ["content", "("]
add_field => { "title" => "%{[content][0]}"}
add_field => { "year" => "%{[content][1]}"}
}
mutate {
convert => {
"year" => "integer"
}
strip => ["title"]
remove_field => ["path", "host","@timestamp","message","content"]
}
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "movies"
document_id => "%{id}"
}
stdout {}
}
input为之前所讲述的数据源,file/path为文件路径。修改为刚才所下载的csv文件所在地址。output为输出源,filter为你要存储在ElasticSearch中的格式,这里放在后面在赘述,先以环境的搭建为主。
注意,我在这里的index是
index => “movies”
如果使用的是我的elk软件包,最好重命名一下,索引名随意
在你的logstash-6.7.0\bin目录下启动cmd命令,输入以下指令
logstash -f stdin.conf
启动成功后
Kibana查看
打开之前登陆的Kibana页面,找到管理的索引模式,创建刚才的索引(movies)。
接着就可以在这里查看刚才所插入的信息
当然你也可以通过下面的开发者工具使用Es的命令进行搜索。
小结
elk的整体搭建其实并不是很困难,按着步骤就能走下来。这篇文章主要是为了初学者进行elk的搭建,后续会讲如何对日志进行处理。 以及elk+redis+filebeat进行更深度的优化。
来源:CSDN
作者:成为大佬的路上
链接:https://blog.csdn.net/qq_36676682/article/details/103603197