一、ELK应用背景:
需求背景:生产环境中业务发展越来越庞大,服务器越来越多,各种访问日志、应用日志、错误日志量越来越多,导致运维人员无法很好的去管理日志,开发人员排查问题,需要到服务器上查日志,不方便,运营人员需要一些数据,需要我们运维到服务器上分析日志;
**解决的问题:**一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问;
**日志系统:**大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率;
一个完整的集中式日志系统,需要包含以下几个主要特点:
1.收集-能够采集多种来源的日志数据;
2.传输-能够稳定的把日志数据传输到中央系统;
3.存储-如何存储日志数据;
4.分析-可以支持 UI 分析;
5.警告-能够提供错误报告,监控机制;
二、ELK平台概述
**概述:**Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能;ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具,目前由于原本的ELK Stack成员中加入了 Beats 工具所以已改名为Elastic Stack。而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用;
**特点:**分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
三、ELK核心组件:
- Logstash:通过对日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。说到搜索,logstash带有一个web界面,搜索和展示所有日志。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去;
- ElasticSearch:是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。在elasticsearch中,所有节点的数据是均等的;
- Kibana :是一个基于浏览器页面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志;
- Filebeat:隶属于Beats。目前Beats包含四种工具:
Packetbeat(搜集网络流量数据);
Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);
Filebeat(搜集文件数据);
Winlogbeat(搜集 Windows 事件日志数据);
四、开始部署
角色 | 所需服务 |
---|---|
node1(192.168.100.137) | Elasticsearch、Kibana |
node2(192.168.100.141) | Elasticsearch、Kibana |
Apache(192.168.100.131) | Logstash |
一、配置elasticserach环境
(1)修改hosts文件
vim /etc/hosts
192.168.100.137 node1
192.168.100.141 node2
(2)关闭防火墙
systemctl stop firewalld.service
setenforce 0
二、部署安装elasticsearch软件
(1)安装
rpm -ivh elasticsearch-5.5.0.rpm //安装
systemctl daemon-reload //重新加载服务配置文件
systemctl enable elasticsearch.service //设置为开机自启动
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
(2)、修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: my-elk-cluster ##集群名称
23 node.name: node-1 ##节点名字
33 path.data: /data/elk_data ##数据存放路径
37 path.logs: /var/log/elasticsearch/ ##日志存放路径
43 bootstrap.memory_lock: false ##不在启动的时候锁定内存
55 network.host: 0.0.0.0 ##提供服务绑定的IP地址
59 http.port: 9200 ##监听端口为9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ##级群发现通过单播实现
(3)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
(4)开启服务
systemctl start elasticsearch.service
netstat -natp | grep 9200
1、浏览器输入网址,查看健康状态
三、安装elasticsearch-head插件
(1)安装依赖包
yum install gcc gcc-c++ make -y
(2)编译安装 node 组件
tar zvxf node-v8.2.1.tar.gz -C /opt/
cd /opt/node-v8.2.1/
./configure
make //这步耗时较长,耐心等待
make install
(3)安装 phantomjs 前端框架
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /opt/
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin/
(4)安装 elasticsearch-head 数据可视化工具
tar zvxf elasticsearch-head.tar.gz -C /opt/
cd /opt/elasticsearch-head/
npm install
(5)修改主配置文件
vim /etc/elasticsearch/elasticsearch.yml
末尾插入以下两行代码:
http.cors.enabled: true
http.cors.allow-origin: "*"
(6)启动 elasticsearch-head
cd /opt/elasticsearch-head/
npm run start & //放在后台运行
检查9100和9100端口
netstat -lnupt |grep 9100
netstat -lnupt |grep 9200
四、创建索引
输入192.168.100.131:9100可以看到Elasticsearch主页面
创建索引
也可以使用命令创建索引
curl -XPUT '192.168.100.137:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
浏览器刷新下,可以看到新创建的索引
五、安装Logstash并搜索日志输入到elasticsearch
(1)安装Apache服务
systemctl stop firewalld.service
setenforce 0
yum install httpd -y
systemctl start httpd.service
(2)安装 logstash
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash
systemctl enable logstash
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ //创建软连接到bin目录下
测试logstash与apache功能是否正常做对接测试
Logstash
-f :通过这个选择可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串 该字符串可以被当作logstash的配置(如果是" ",则默认使用stdin作为输入、stdout作为输出)
输入采用标准输入、输出采用标准输出
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.137:9200"] } }'
登录Apache主机,做对接配置
logstash 配置文件主要由三部分组成:input、output、filter
chmod o+r /var/log/messages ##给日志文件授权
创建并编辑配置文件
vim /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.100.137:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
六、node1主机安装 kibana
rpm -ivh kibana-5.5.1-x86_64.rpm
cd /etc/kibana/
cp kibana.yml kibana.yml.bak
vim kibana.yml
2 server.port: 5601 #打开端口
7 server.host: "0.0.0.0" #监听地址
21 elasticsearch.url: "http://192.168.100.137" #和elasticsearch建立联系指向本地
30 kibana.index: ".kibana" #在elasticsearch中添加 kibana服务
重启服务
systemctl start kibana.service
systemctl enable kibana.service
浏览器访问:192.168.100.137:5601
对接Apache主机的Apache 日志文件
cd /etc/logstash/conf.d/
vim apache_log.conf //创建配置文件,添加以下代码:
input {
file{
path => "/etc/httpd/logs/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/etc/httpd/logs/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch {
hosts => ["192.168.220.136:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error"{
elasticsearch {
hosts => ["192.168.100.137:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
重启服务
/usr/share/logstash/bin/logstash -f apache_log.conf
再在可视化界面上, 创建两个索引
1、apache_access-*
2、apache_error-*