本文共 4704 字,大约阅读时间需要 15 分钟。
ELK 是elastic公司提供的一套完整的日志收集、展示解决方案,是三个产品的首字母缩写,分别是ElasticSearch、Logstash 和 Kibana,同时加入了 beats 来优化Logstash
ElasticSearch 是一个基于 Lucene 构建的开源,分布式,RESTful 搜索引擎。
Logstash 传输和处理你的日志、事务或其他数据。 Kibana 将 Elasticsearch 的数据分析并渲染为可视化的报表。 Beats 是单一用途的数据传输平台,它可以将多台机器的数据发送到 Logstash 或 ElasticSearch。但 Beats 并不是不可或缺的一环互联网行业里日志数据非常重要,形式也多种多样。通过日志我们可以计算请求量、流量来源分析、了解用户行为。对于故障排查肯定是希望能够快速的进行日志查询、定位、解决问题,对于实时性要求非常高。
一个完整的集中式日志系统,需要包含以下几个主要特点:
- 收集-能够采集多种来源的日志数据
- 传输-能够稳定的把日志数据传输到中央系统
- 转换— 能够对收集的日志数据进行转换处理
- 存储-如何存储日志数据
- 分析-可以支持 UI 分析
- 告警-能够提供错误报告,监控机制
ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统
ELK老架构
用Beats进行采集的架构 本文不讲述beats,只会对ELK三大组件进行安装使用说明每台机器都按照相同步骤安装Elasticsearch,但是先不要启动,因为每台机器的配置不一样,需要单独配置。
具体安装步骤参考另一篇博客:
安装时候,特别要注意的是jvm配置要根据实际机器的内存大小进行配置。
也可以采用先配置好一台,然后将这个elasticsearch打包放到另外两台上,然后再分别修改配置。
修改配置:
vim /usr/local/elk/elasticsearch/elasticsearch-6.4.3/config/elasticsearch.yml
elk01节点
cluster.name: elk-clusternode.name: elk01path.data: /usr/local/elk/elasticsearch/datapath.logs: /usr/local/elk/elasticsearch/logbootstrap.memory_lock: truenetwork.host: 0.0.0.0http.port: 9200discovery.zen.ping.unicast.hosts: ["10.8.206.47", "10.8.206.48"]
elk02节点
cluster.name: elk-clusternode.name: elk02path.data: /usr/local/elk/elasticsearch/datapath.logs: /usr/local/elk/elasticsearch/logbootstrap.memory_lock: truenetwork.host: 0.0.0.0http.port: 9200discovery.zen.ping.unicast.hosts: ["10.8.206.46", "10.8.206.48"]
elk03节点
cluster.name: elk-clusternode.name: elk03path.data: /usr/local/elk/elasticsearch/datapath.logs: /usr/local/elk/elasticsearch/logbootstrap.memory_lock: truenetwork.host: 0.0.0.0http.port: 9200discovery.zen.ping.unicast.hosts: ["10.8.206.46", "10.8.206.47"]
三台机器分别切换到es用户进行启动(启动是可能会报错,基本都是内存、文件描述符的问题,见上面的博客,都有对应解决方案):
su es/usr/local/elk/elasticsearch/elasticsearch-6.4.3/bin/elasticsearch -d
验证
访问每台机器http://10.8.206.46:9200/http://10.8.206.47:9200/http://10.8.206.48:9200/
获取集群状态
http://10.8.206.46:9200/_cluster/health?pretty
Kibana主要是用来提供一个ES界面进行可视化查询的,要安装的版本必须和elasticsearch一致!
官网下载对应版本:https://www.elastic.co/downloads/past-releases
或直接在服务器上下载(笔者安装在第一台机器:elk01):cd /usr/local/srcwget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.3-linux-x86_64.tar.gz
解压并移动:
tar -zxvf kibana-6.4.3-linux-x86_64.tar.gzmv kibana-6.4.3-linux-x86_64 /usr/local/elk/
修改配置文件:
vim /usr/local/elk/kibana-6.4.3-linux-x86_64/config/kibana.yml# 连接本机的eselasticsearch.url: "http://127.0.0.1:9200"# kibana对外提供服务的端口server.port: 5601# 允许外部所有机器远程连接,默认为localhost,只允许本机连接server.host: "0.0.0.0"
启动:
#非后台启动/usr/local/elk/kibana-6.4.3-linux-x86_64/bin/kibana#后台启动nohup /usr/local/elk/kibana-6.4.3-linux-x86_64/bin/kibana &
kibana使用流程:
- 定义index pattern
- 在discover中查询数据、保存查询
- 在Visualize中为查询创建可视化的图表
- 在dashboard中汇总展示多个数据图表
- 在Timelion中创建时序数据的可视化展示
- 在management中管理各种保存的对象
kibana官方用户手册:
https://www.elastic.co/guide/cn/kibana/current/index.htmlLogstash主要是用来采集数据的,如果一台机器需要采集数据上传到es,则必须在这台机器上安装Logstash,要安装的版本必须和elasticsearch一致!
官网下载对应版本:https://www.elastic.co/downloads/past-releases
或直接在服务器上下载(笔者安装在第三台机器:elk03):cd /usr/local/srcwget https://artifacts.elastic.co/downloads/logstash/logstash-6.4.3.tar.gz
解压并移动:
tar -zxvf logstash-6.4.3.tar.gzmv logstash-6.4.3 /usr/local/elk/
接下来做如下几个实验进行验证:
1. 控制台–>控制台
测试控制台输入,控制台输出的情况,进入bin/目录创建test_std_std.conf文件cd /usr/local/elk/logstash-6.4.3/binvim test_std_std.conf# test_std_std.conf内容如下input { stdin { }}output { stdout { }}
启动:
./logstash -f test_std_std.conf
等待一段时间后,输入 hello world,会打印一串内容,如下:
2. 文件–>控制台
测试文件输入,控制台输出的情况,进入bin/目录创建test_file_std.conf文件cd /usr/local/elk/logstash-6.4.3/binvim test_file_std.conf# test_file_std.conf内容如下input { file { path => "/usr/local/elk/elasticsearch/log/elk-cluster.log" start_position => "beginning" }}output { stdout{ codec => rubydebug }}
启动:
./logstash -f test_file_std.conf
等待一段时间后,会看到日志文件的内容会被逐行打印出来,如下:
3. 文件–>elasticsearch 测试文件输入,输出到es的情况,进入bin/目录创建test_file_es.conf文件cd /usr/local/elk/logstash-6.4.3/binvim test_file_es.conf# test_file_es.conf内容如下input { file { path => "/usr/local/elk/elasticsearch/log/elk-cluster.log" #读取哪个文件 start_position => "beginning" #从文件开始处读写 }}output { elasticsearch { hosts => ["10.8.206.46:9200"] #es http地址 index => "es-test-%{+YYYY.MM.dd}" #索引名称 } stdout{ codec => rubydebug }}
启动:
./logstash -f test_file_es.conf
和上一个例子的不同之处是在于output部分要输出到es
至此ELK安装讲解完毕!
问题一:多个网卡情况下,如何指定其中某个网卡发布
如果机器有多个网卡,比如安装docker会多出docker0网卡,如下:
elasticsearch每次启动时都默认选择第一个网卡docker0,是错误的,我想让他指定使用ens33,解决方法:使用 network.publish_host 参数
转载地址:http://fzpxi.baihongyu.com/