ELK超详细配置
一、ELK日志分析系统简介
ELK日志分析系统是开源软件的集合,对外是作为一个日志管理系统的开源方案,它可以从任何来源、任何格式进行日志搜索、分析与可视化展示。
1.1、ELK日志分析系统
组成
ELK日志分析系统(传统)是Elasticsearch+Logstash+Kibana
- elasticsearch(es):通过搭建群集;存储日志数据,索引日志数据;
- logstash :收集日志,收集到了后给es数据库存储;
- kibana :视图形式展现日志信息,更加人性化。
也可以使用EFK:包含es数据库+Logstash+kafka+redis缓存数据库+Kibana
1.2、日志处理步骤
- 将日志进行集中化管理
- 将日志格式化(Logstash)并输出到Elasticsearch
- 对格式化后的数据进行索引和存储(Elasticsearch)
- 前端数据的展示(Kibana)
二、软件概念介绍
2.1、Elasticsearch介绍
1、Elasticsearch的概述
提供了一个分布式多用户能力的全文搜索引擎。
2、Elasticsearch的基本核心概念
接近实时:索引文档时有轻微的延迟
集群:es具有集群机制,节点通过集群名称加入集群中,节点具有唯一标识
节点:存储数据并参与集群的索引和搜索功能
索引:相当于关系型数据库的库,是相似文档的集合
分片和副本:
(1)分片机制:提升索引效率,提高存储量
(2)副本:高可用性(解决单点故障),增大吞吐量
2.2、Logstash介绍
- 一款强大的数据处理工具
- 可实现数据传输、格式处理、格式化输出
- 数据输入(从业务输入)、数据加工(如过滤、改写等)以及数据输出(输出到Elasticsearch群集)
Logstash的主要组件
shipper:日志收集者,负责监控本地日志文件的变化,及时把日志文件的最新内容收集起来。通常,远程代理端(agent)只需要运行这个组件即可
indexer:日志存储者,负责接收日志并写入到本地文件
broker:日志hub,负责连接多个shipper和多个indexer
search and storage:允许对事件进行搜索和存储
web interface:基于Web的展示界面
2.3、Kibana介绍
1、一个针对Elasticsearch的开源分析及可视化平台
2、搜索、查看存储在Elasticsearch索引中的数据
3、通过各种图表进行高级数据分析及展示
4、主要功能
- Elasticsearch无缝之集成
- 整合数据,复杂数据分析
- 让更多团队成员收益
- 接口灵活,分享更容易
- 配置简单,可视化多数据源
- 简单数据导出
三、ELK日志分析系统部署
3.1、案例拓扑
主机名 | IP地址 | 主要软件 |
---|---|---|
apache | 192.168.40.11 | httpd、logstash |
node1 | 192.168.40.12 | Elasticsearch、Kibana |
node2 | 192.168.40.13 | Elasticsearch |
[root@localhost ~]# hostnamectl set-hostname node1 #修改主机名
[root@localhost ~]# su
[root@node1 ~]# vim /etc/hosts #添加本地解析,识别集群主机名
192.168.40.12 node1
192.168.40.13 node2
[root@node1 ~]# java -version #确认java已安装(Centos7.6自带)
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
3.2、步骤
3.2.1 部署 es
1.安装elasticsearch-5.5.0.rpm包
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm
警告:elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY
准备中... ################################# [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
正在升级/安装...
1:elasticsearch-0:5.5.0-1 ################################# [100%]
###NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
###You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
2.根据上一步的提示加载elasticsearch服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
3.更改elasticsearch主配置文件
[root@node1 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
[root@node1 ~]# grep -v '^#' /etc/elasticsearch/elasticsearch.yml
17行:cluster.name: my-elk-cluster #集群名字
23行:node.name: node1 #节点名字
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地址,0.0.0.0代表所有地址
59行:http.port: 9200 #监听端口为9200
68行:discovery.zen.ping.unicast.hosts: ["node1", "node2"] #集群发现通过单播实现,单播的主机名为"node1", "node2"
4.创建数据存放路径并授权
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch.elasticsearch /data/elk_data/
5.启动elasticsearch,查看是否成功开启
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -anpt | grep 9200 #查看服务是否成功开启
tcp6 0 0 :::9200 :::* LISTEN 4356/java
[root@node2 ~]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 43324/java
grep -v "^#" /etc/elasticsearch/elasticsearch.yml #反向过滤
6.查看节点信息,用真机浏览器打开http://192.168.40.12:9200 ,会显示节点的信息,node2节点同理
用浏览器打开 http://192.168.40.13:9200
检测集群的健康情况和状态
(1)检测集群的健康情况
用浏览器打开http://192.168.40.12:9200/_cluster/health?pretty
(2)检测集群的状态(比健康情况显示的更加详细)
用浏览器打开http://192.168.40.12:9200/_cluster/state?pretty
7.两个节点安装elasticsearch-head插件(安装插件可以更加人性化的管理集群)
(1)编译安装node组件依赖包
上传node-v8.2.1.tar.gz
[root@node1 ~]# yum -y install gcc gcc-c++ make
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz
[root@node1 ~]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3 #用3个核心数处理,按个人电脑配置而定
[root@node1 node-v8.2.1]# make install
(2)编译安装phantomjs(前端框架)
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# cp phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
(3)安装elasticsearch-head(数据可视化工具)
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
8.修改elasticsearch.yml主配置文件
[root@node1 ~]# vi /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@node1 ~]# systemctl restart elasticsearch.service
9.后台启动elasticsearch-head服务
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start & #后台运行
[1] 48846
[root@node1 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@node1 ~]# netstat -ntap | grep 9100 #检测elasticsearch-head端口是否开启
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 48865/grunt
[root@node1 ~]# netstat -ntap | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 48796/java
10.在浏览器上验证
网页中可以通过192.168.40.12:9100来访问到可视化网页
通过连接192.168.40.12:9200 可以连接到群集
11.回到node节点创建索引,并登录数据化可视网页查看索引信息
通过在索引可以根据自己的要求来新建索引,在概览中可以查看;
在虚拟机中通过curl可以新建索引
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
3.2.2 apache主机中安装logstash并做日志搜集
1.更改主机名
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
2.安装apache服务,查看java环境
[root@apache ~]# yum -y install httpd java
[root@apache ~]# systemctl start httpd
[root@apache ~]# systemctl status httpd
[root@apache ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
3.安装logstash,将logstash-5.5.1.rpm上传到/root目录下
[root@apache ~]# rpm -ivh logstash-5.5.1.rpm
[root@apache ~]# systemctl start logstash.service
[root@apache ~]# systemctl enable logstash.service
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ #建立命令软链接
4.logstash(apache)与elasticsearch(node)功能是否正常,做对接测试
logstash命令选项解释:
-f:指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“ ”,则默认使用stdin做输入,stdout为输出)
-t:测试配置文件是否正确,然后退出
#输入采用标准输入,输出采用标准输出
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
...省略内容
12:02:47.424 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com #输入几个网站
2021-01-07T04:03:03.744Z apache www.baidu.com
www.text.com
2021-01-07T04:03:15.662Z apache www.text.com
5.使用rubydebug显示详细输出,codec为一种编解码器
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
...省略内容
11:59:48.800 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
"@timestamp" => 2021-01-07T04:01:23.423Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
6.使用logstash将信息输出给elasticsearch
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.40.12:9200"] } }'
...省略内容
23:26:26.165 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com #输入内容测试
www.text.com
7.打开浏览器输入http://192.168.40.12:9100/,
查看索引信息,显示新的数据信息说明输出到elasticsearch成功
8.logstash与ES的对接
logstash通过脚本与es对接日志信息
logstash配置文件主要由三部分组成:input、output、filter
[root@apache ~]# chmod o+r /var/log/messages #允许其他用户访问
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 615221 1月 7 11:20 /var/log/messages
[root@apache ~]# vim /etc/logstash/conf.d/system.conf
input { #logstash输入:从/var/log/messages输入,类型为system,起始位置为从头开始
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output { #logstash输出:输出给elasticsearch(以IP地址指定位置)
elasticsearch {
hosts => ["192.168.40.12:9200"]
index => "system-%{+YYY.MM.dd}"
}
}
root@apache ~]# systemctl restart logstash.service
9.打开浏览器输入http://192.168.40.12:9100/
查看索引信息,显示新的索引信息代表logstash搜集到的日志信息成功输出给elasticsearch
3.3.3 安装kibana与apache对接
1.在node1主机安装kibana
[root@node1 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 ~]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml
第2行:server.port: 5601 #kibana打开的端口
第7行:server.host: "0.0.0.0" #kibana侦听的地址
第21行:elasticsearch.url: "http://192.168.40.12:9200" #和elasticsearch建立联系
第30行:kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service #启动kibana服务
[root@node1 kibana]# systemctl enable kibana.service #开机启动kibana服务
[root@node1 kibana]# netstat -anpt | grep 5610
2.浏览器中登录192.168.40.12:5601,首次登录提示创建一个索引名字:
填入system-*,即对接系统日志文件名
同时也能看到刚才在kibana.yml中添加的在elasticsearch中添加.kibana索引配置生效了(用于验证kibana和elasticsearch是否成功连接)
3.kibana对接apache主机的apache 日志文件(访问的、错误的)
[root@apache ~]# cd /etc/logstash/conf.d/
[root@apache conf.d]# touch apache_log.conf
[root@apache conf.d]# vi 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.40.12:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.40.12:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# logstash -f apache_log.conf
#指定logstash的配置文件,根据apache_log.conf配置logstash(-f可以不重启加载)
4.浏览器访问http://192.168.40.12:9100/,查看apache日志文件的索引是否建立成功
5.kibana中添加刚才elasticsearch中新建的索引,可以以更加人性化的视图界面查看、分析日志,步骤如下:
总结
使用场景:双十一,各大电商平台访问量暴增,对应的访问日志暴增,系统维护人员需要对日志进行处理分析,但苦于数量之多…
为了解决大量日志分析困难的问题,可以配置ELK进行集中化管理;
ELK日志分析系统是一款非常强大的日志分析工具,能够帮助运维工程师更快更准确的定位到想要的日志,最后通过kibana,可视化的简便的展示出数据效果,使用起来非常人性化。