第一章 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

  1. 创建映射
    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目录中