第一章 ELK简介及作用
1.为什么用到ELK:
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。
2.一个完整的集中式日志系统,需要包含以下几个主要特点:
1)收集-能够采集多种来源的日志数据
2)传输-能够稳定的把日志数据传输到中央系统
3)存储-如何存储日志数据
4)分析-可以支持 UI 分析
5)警告-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。
3.ELK简介:
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
1)Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
2)Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
3)Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
4)Filebeat隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据)
Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
Filebeat(搜集文件数据)
Winlogbeat(搜集 Windows 事件日志数据)
第二章 ELK的组成与搭建
1.使用的各个组件及版本
使用的是6.0.0的elasticsearch,logstash,kibana,filebeat
2.Elk的搭建–elasticsearch搭建
1.解压四个tar包,目录自己指定(我在/opt/elk-6.0.0/下搭建的,包含三个文件)
2.首先安装elasticsearch,解压完成之后,需要修改配置文件,其在解压目录之下的config目录下vim elasticsearch.yml,修改如下:
cluster.name: master-node # 集群中的名称
node.name: master-node # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false # 表示这不是数据节点
path.data: /data/elk/data #存放数据地方,索引(自己指定,需要将目录修改为启动es的用户)
path.logs: /data/elk/logs #存放elasticsearch产生日志地方,同上
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.1.47","192.168.1.48", "192.168.1.49", "192.168.1.50"] # 配置自动发现
3.修改完配置文件之后,进入bin目录启动es,会报告用户启动异常,在es中,不允许使用root用户启动es,必须使用其他用户来实现启动,搭建es集群,使用scp 将es目录发送到其他节点,并修改节点名称,是否为主节点,是否为数据节点
4.修改配置sysctl.conf
vi /etc/sysctl.conf
添加
vm.max_map_count=655360 ==》最大虚拟内存区域 基本是262144 起步
执行
sysctl -p
5.分发完毕修改完配置文件之后,都使用非root用户进行启动,后台启动为 ./bin/elasticsearch -d 进行后台启动,启动完毕之后,通过访问web:ip地址:9200,
如下,说明启动成功
6.Es的简单使用
1.create a index ===》此索引可以在后续的kibana中指定,即可查看其下的数据
curl -XPUT http://192.168.1.47:9200/log
- 创建映射
curl -XPOST http://192.168.1.47:9200/index/fulltext/_mapping -H ‘Content-Type:application/json’ -d’
{
"properties": {
"content": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
}
}
}’
3.index some docs
curl -XPOST http://192.168.1.47:9200/index/fulltext/1 -H 'Content-Type:application/json' -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://192.168.1.47:9200/index/fulltext/2 -H 'Content-Type:application/json' -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://192.168.1.47:9200/index/fulltext/3 -H 'Content-Type:application/json' -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://192.168.1.47:9200/index/fulltext/4 -H 'Content-Type:application/json' -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
4.query with highlighting
curl -XPOST http://192.168.1.47:9200/index/fulltext/_search -H 'Content-Type:application/json' -d'
{
"query" : { "match" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'
2.查看es集群情况
查看集群健康状况
curl ‘192.168.1.47:9200/cluster/health?pretty’
详细情况
curl ‘192.168.1.47:9200/cluster/state?pretty’
3. Kibana搭建
1.解压kibana之后,配置kibana目录下config下的kibana.yml 配置文件
server.port: 5601 #监听端口
server.host: “192.168.1.47” #监听IP
elasticsearch.url: “http://192.168.1.47:9200" # elasticsearch地址,这是用本机
2.回到bin目录下启动kibana,可以在web查看其展示的页面:http://192.168.1.47:5601
4. filebeat的安装和使用
1.解压filebeat包,然后进入其目录下修改filebeat.yml文件
filebeat.prospectors:
- type: log
enabled: false
paths: - /tmp/root/hive.log
配置其监控的目录,可以使用正则,如:-/tmp//.log 即监控tmp目录下的子目录下的以.log结尾的文件,不支持递归监控===》可以设置多个目录
此出有一个配置的csdn,挺齐全挺详细
2.将监控目录的数据写到es或者是kafka或者是logstash等
output.logstash:
hosts: [“192.168.1.47:5044”]
也可以写到其他地方数据,但是只能写一个output,其他的需要注解
3.启动filebeat,开始监控指定目录
4.Logstash的安装和使用
1.解压logstash到指定目录,进入解压目录中创建一个文件:vim test.conf
在创建好的test.conf文件中加入input,fliter,output三部分,分别代表着输入源,过滤器,输出源,也可以使用其他的插件
input {
file{
path => "/tmp/*/*.log"
}
}
filter {
if [message] !~ "error|ERROR|Exception" {
ruby {
code => "event.cancel"
}
}
}
output {
elasticsearch {
hosts => ["192.168.1.47"]
index => "log"
}
stdout {
codec => rubydebug
}
}
检测loagstash的配置文件
logstash -f test.conf –config.test_and_exit
–config.test_and_exit选项的意思是解析配置文件并报告任何错误
启动:
logstash -f test.conf –config.reload.automatic
–config.reload.automatic选项的意思是启用自动配置加载,以至于每次你修改完配置文件以后无需停止然后重启Logstash
监控 “/tmp//.log” 此tmp目录下的子目录中的.log文件,然后将输入信息落地到索引为log的主机IP为192.168.1.47 的elasticsearch节点上
Filter进行了监控,只过滤出包含error的数据
在kibana上可以通过监控log这个索引,查看落地到elasticsearch的log索引上的数据
5.更换监控目录时,需要删除.lock文件,此文件在目录下的data目录中