简介
在大型运维环境中,管理员通常面对大量的服务器,对于这些服务器的维护,一个很重要的工作就是查看每台服务器的日志信息,而每天逐台检查的方式显然效率比较低下。传统的方式是通过搭建日志服务器,将所有服务器的日志收集到日志服务器统一查看。但是面对众多的日志数据很难去分析以及查找所需要的内容,即很难快速定位是否出现故障,以及哪些机器哪些服务存在故障。而ELK 可以很好地解决这一问题。
一、Elasticsearch 介绍
Elasticsearch是一个基于Lucene的搜索服务器。它稳定、可靠、快速,而且具有比较好的水平扩展能力,为分布式环境设计,在云计算中被广泛应用。Elasticsearch提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口,通过该接口,用户可以通过浏览器和Elasticsearch 通信。Elasticsearch 是用Java开发的,并作为Apache许可条款下的开放源码发布,Wikipedia、Stack、Overflow、GitHub等都基于Elasticsearch来构建搜索引擎,具有实时搜索、稳定,可靠、快速、安装使用方便等特点。
二、Logstash 介绍
Logstash 由 JRuby 语言编写,运行在Java虚拟机(JVM)上,是一款强大的数据处理工具,可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能,常用于日志处理。LogStash可配置单一的代理端,与其他开源软件结合,以实现不同的功能。
Logstash的理念很简单,它只做三件事情:数据输入,数据加工(如过滤,改写等)以及数据输出。通过组合输入和输出,可以实现多种需求。Logstash处理日志时,典型的部署架构图。
三、Kibana 介绍
Kibana是一个针对Elasticsearch的开源分析及可视化平台,主要设计用来和Elasticsearch一起工作,可以搜索,查看存储在Elasticsearch索引中的数据,并通过各种图表进行高级数据分析及展示。Kibana 可以让数据看起来一目了然。它操作简单,基于浏览器的用户界面可以让用户在任何位置都可以实时浏览。Kibana 可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。Kibana使用非常简单,只需要添加索引就可以监测Elasticsearch索引数据。
四、实验案例
实验环境
虚拟机 3台 centos7.9\网卡NAT模式 数量 1
- 组件包:elasticsearch-5.5.0.rpm、elasticsearch-head.tar.gz、node-v8.2.1.tar.gz 、phantomjs-2.1.1-linux-x86_64.tar.bz2 、logstash-5.5.1.rpm、kibana-5.5.1-x86_64.rpm
设备 | IP | 备注 |
Centos01 | 192.168.160.51 | Node1 elasticsearch |
Centos02 | 192.168.160.52 | Node2 kibana |
Centos03 | 192.168.160.53 | Node3 logstash+httpd |
1.安装并编译elasticsearch
Node1 Node2 都配置
cat << EOF >> /etc/hosts
192.168.160.51 node1
192.168.160.52 node2
EOF
上传安装包 elasticsearch-5.5.0.rpm
[root@love ~]# rpm -ivh elasticsearch-5.5.0.rpm
编辑elasticsearch 配置文件
[root@love ~]# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-elk-cluster #群集名称
node.name: node1 #节点名称,不同节点修改编号
path.data: /data/elk_data #日志收集目录
path.logs: /data/elk_log #日志存放路径
bootstrap.memory_lock: false #不锁定内存
network.host: 0.0.0.0 #监听IP
http.port: 9200 #监听端口
discovery.zen.ping.unicast.hosts: ["node1", "node2"] #单播实现群集
创建日志文件夹
[root@love ~]# mkdir -p /data/elk_data
[root@love ~]# mkdir -p /data/elk_log
[root@love ~]# chown -R elasticsearch:elasticsearch /data
[root@love ~]# systemctl start elasticsearch
查看端口是否启动
2.Node1部署elasticearch-head插件
上传并安装插件:node-v8.2.1.tar.gz、elasticsearch-head.tar.gz、phantomjs-2.1.1-linux-x86_64.tar.bz2
安装node-v8.2.1.tar.gz
[root@love ~]# tar zxf node-v8.2.1.tar.gz
[root@love node-v8.2.1]# ./configure && make && make install
安装elasticsearch-head.tar.gz
[root@love ~]# yum -y install bzip2
[root@love ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@love ~]# mv phantomjs-2.1.1-linux-x86_64 /usr/src/phantomjs2.1
[root@love ~]# ln -s /usr/src/phantomjs2.1/bin/* /usr/local/bin/
安装phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@love ~]# tar zxf elasticsearch-head.tar.gz
[root@love ~]# cd elasticsearch-head/
[root@love elasticsearch-head]# npm install
[root@love elasticsearch-head]# cd
[root@love ~]# cat << EOF >> /etc/elasticsearch/elasticsearch.yml
> http.cors.enabled: true
> http.cors.allow-origin: "*"
> http.cors.allow-headers: Authorization,Content-Type
> EOF
启动服务
[root@love ~]# systemctl restart elasticsearch
[root@love elasticsearch-head]# npm run start &
[1] 110314
测试连接http://192.168.19.10:9100
3.部署httpd+ logstash(Node3)
上传安装包 logstash-5.5.1.rpm
[root@love22 ~]# yum -y install httpd
[root@love22 ~]# rpm -ivh logstash-5.5.1.rpm
[root@love22 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/sbin/
编辑自定义提交日志配置
[root@love22 ~]# vim /etc/logstash/conf.d/httpd_log.conf
input {
file {
path => "/var/log/httpd/access_log"
type => "access"
start_position => "beginning"
}
file {
path => "/var/log/httpd/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.19.10:9200"]
index => "httpd_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.19.20:9200"]
index => "httpd_error-%{+YYYY.MM.dd}"
}
}
}
启动日志传递
[root@love22 ~]# nohup logstash -f /etc/logstash/conf.d/httpd_log.conf &
[1] 65183
4.安装kibana图形化查看工具
上传安装包 kibana-5.5.1-x86_64.rpm
[root@love11 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@love11 ~]# vim /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.url: "http://192.168.19.10:9200"
kibana.index: ".kibana"
[root@love11 ~]# systemctl enable kibana --now