一. ELK 日志分析系统
1.1 ELK日志分析系统的组成
- Elasticsearch
- Logstash
- Kibana
1.2 日志处理步骤
- 将日志进行集中管理
- 将日志格式化(Logstash)并输出到Elasticsearch
- 对格式化后的数据进行时索引和存储(Elasticsearch)
- 前端数据的展示(Kibana)
二. Elasticsearch 介绍
2.1 Elasticsearch 的概述
- 提供一个分布式多用户能力的全文搜索引擎
2.2 Elasticsearch核心概念
- 接近实时
- 集群
- 节点
- 索引
索引(库)-----类型(表)--------文档(记录) - 分片和副本
三. Logstash介绍
3.1 Logstash介绍
- 一款强大的数据处理工具
- 可实现数据传输,格式处理,格式化输出
- 数据输入,数据加工(如过滤,改写等) 以及数据输出
3.2 Logstash主要组件
- Shipper
- Indexer
- Broker
- Search and Storage
- Web Interface
四. Kibana介绍
4.1 Kibana介绍
- 一个针对Elasticsearch的开源分析及可视化平台
- 搜索,查看存储在Elasticsearch索引中的数据
- 通过各种图表进行高级数据分析及展示
4.2 Kibana主要功能
- Elasticsearch无缝之集成
- 集合数据,复杂数据分析
- 让团队更多团队成员收益
- 接口灵活,分享更容易
- 配置简单,可视化化多数据源
- 简单数据导出
五. 部署ELK日志分析系统
5.1 案例设计
主机 | 操作系统 | 主机名/IP地址 | 主要软件 |
---|---|---|---|
服务器 | CentOS 7.4 | node1/20.0.0.22 | Elasticsearch |
服务器 | CentOS 7.4 | node2/20.0.0.23 | Elasticsearch |
服务器 | CentOS 7.4 | 20.0.0.24 | Logstash\apache |
服务器 | CentOS 7.4 | 20.0.0.21 | kibana |
5.2 配置 elasticsearch环境
登录20.0.0.22更改主机名
hostnamectl set-hostname
su
配置主机名解析
vim /etc/hosts
20.0.0.22 node1
20.0.0.23 node2
查看Java环境
[root@node1 ~]# 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)
5.3 部署elasticsearch软件
1、安装 elasticsearch-rpm包
上传 elasticsearch-55.0.pm到/op目录下
[root@node1 ~]# cd /opt
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm //rpm直接安装elasticsearch软件包,没有依赖
2、加载系统服务
[root@node1 ~]# systemctl daemon-reload //以守护进程来加载,并开启elasticsearch服务
[root@node1 ~]# systemctl enable elasticsearch.service
3、更改 telasticsearch主配置文件
[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 ~]# cp -p elasticsearch.yml elasticsearch.yml.bak //备份配置文件时记得是使用cp -p 保存权限
[root@node1 ~]# vim elasticsearch.yml
修改以下选项:
cluster.name: my-elk-cluster
node.name: node1
path.data: /data/elk_data
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
#######################################################################
配置文件分析:
cluster.name: my-elk-cluster #集群名
node.name: node1 #当前节点名
path.data: /data/elk_data #数据存放的位置
path.logs: /var/log/elasticsearch #日志存放的位置
bootstrap.memory_lock: false #不在启动的时候锁定内存:锁定物理内存地址,防止es内存被交换出去
network.host: 0.0.0.0 #提供服务绑定的IP地址,0.0.0.0代表所有地址
http.port: 9200 #侦听端口为9200
discovery.zen.ping.unicast.hosts: ["node1", "node2"] #集群发现通过单播实现(群集里包含的节点,并非指主机名)
4、创建数据存放路径并授权
[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/ //赋予给elasticsearch管理
5、启动 elasticsearch是否成功开启
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# systemctl restart elasticsearch.service
[root@node1 ~]# netstat -anpt | grep 9200
6.查看节点信息用真机的浏览器打开
在谷歌浏览器输入:http:12.0.0.22:9200
{
"name" : "node1",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "O7vIIvwYT8KeQIMW9tc_HQ",
"version" : {
"number" : "5.5.0",
"build_hash" : "260387d",
"build_date" : "2017-06-30T23:16:05.735Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}
5.4 安装 elasticsearch-head插件
上述查看集群的方式,及其不方便,我们可以通过安装 lasticsearch-head播件后,我们可以以可式化的方式,友好的查看到日志数据
5.41 安装node依赖包
(为了安装elasticsearch-head工具的依赖包),手工编译安装
上传node-v8.2.1.tar.gz 到/opt 编译安装node组件依赖包样耗时比较长47分钟
[root@node1 ~]# yum -y install gcc gcc-c++ make
[root@node1 ~]# cd /opt
[root@node1 ~]# tar zxvf node-v8.2.1.tar.gz
[root@node1 ~]# cd node-v8.2.1/
[root@node1 ~]# ./configure
[root@node1 ~]# make -j3 (时间比较久)
[root@node1 ~]# make install
5.42 安装phantomjs前端架构
上传phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
[root@node1 ~]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# ls
bin examples README.md
ChangeLog LICENSE.BSD third-party.txt
[root@node1 phantomjs-2.1.1-linux-x86_64]# cp bin/phantomjs /usr/local/bin/
5.43 安装elasticsearch-head数据可视化工具
1.安装elasticsearch-head
上传elasticsearch-head.tar.gz 到/opt
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
2.修改主配置文件
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
在末尾加入
http.cors.enabled: true //开启跨域访问支持,默认为false
http.cors.allow-origin: "*" //跨域访问允许的域名地址
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service
3.开启elasticsearch-head工具,检查9100和9200端口
[root@node1 elasticsearch-head]# npm run start &
[1] 101019
[root@node1 elasticsearch-head]# netstat -anpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 101029/grunt
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service
[root@node1 elasticsearch-head]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 101085/java
4.真机使用谷歌浏览器测试
在真机上输入:12.0.0.22:9100 可以看到群集很健康是绿色的 在
elasticsearch后面的栏目中输入http:/19216810041:9200
5.5 logstash搭建安装(12.0.0.24)
5.51 安装logstash软件
上传logstash-5.5.1.rpm到/opt,改主机名为apache
[root@apache opt]# rpm -ivh logstash-5.5.1.rpm
[root@apache opt]# systemctl start logstash.service
[root@apache opt]# systemctl enable logstash.service
[root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin //做个软连接,让logstash的命令能让系统所识别
5.52 测试logstash软件
采用标准输入和输出的方式测试一下
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{} }'
##需要稍微等一会
*******
输入:www.baidu.com
显示:2020-10-29T03:31:32.572Z apache www.baidu.com
使用rubydebug显示详细输出,codec是一种编解码器
[root@apache opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
##需要稍微等一会
********
输入:www.baidu.com
显示:
{
"@timestamp" => 2020-10-29T03:46:17.817Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
使用logstash将信息写入elasticsearch中
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["12.0.0.24:9200"] } }'
*********
输入:
www.baidu.com
www.sina.com.cn
www.google.com.cn
输出:
终端没有显示,要去宿主机的浏览器访问12.0.0.24:9100
下面输入:http://12.0.0.24:9200/点击连接
发现概览里面多出一个logstash-2020.10.29的索引
点击数据浏览选择logstash-2020.10.29的索引,右边显示框会显示我们在终端输入的三个地址。
5.53 做对接配置
与系统日志(/var/log/messages)做对接配置
[root@apache opt]# cd /var/log/
[root@apache log]# ll messages
找到messages文件
-rw-------. 1 root root 1033039 10月 29 11:58 messages
给他加个其他用户可读的权限
[root@apache log]# chmod o+r messages
[root@apache log]# ll messages
-rw----r--. 1 root root 1053833 10月 29 12:00 messages
对于想要对接的数据,在/etc/logstash/conf.d 新创建一个新的**.conf 文件**
[root@apache log]# vim /etc/logstash/conf.d/system.conf //新建配置文件
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["20.0.0.10:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
去宿主机的浏览器访问20.0.0.10:9100 下面输入:http://20.0.0.10:9200/点击连接
发现概览里面多出一个system-2020.10.29的索引
5.6 kibana安装 (12.0.0.21)
上传kibana-5.5.1-x86_64.rpm包到/opt目录下,主机名改为kibana
[root@kibana opt]# rpm -ivh kibana-5.5.1-x86_64.rpm
去到kibana目录,做个备份再编辑配置文件
[root@kibana opt]# cd /etc/kibana/
[root@kibana opt]# cp kibana.yml kibana.yml.bak
[root@kibana kibana]# vim kibana.yml
第二行:server.port: 5601
第七行:server.host: "0.0.0.0"
二十一:elasticsearch.url: "http://20.0.0.10:9200"
三十行:kibana.index: ".kibana"
开启kibana服务,设为开机自启
[root@kibana kibana]# systemctl start kibana.service
[root@kibana kibana]# systemctl enable kibana.service
真机输入20.0.0.40:5601
首次登录创建一个索引名字:system-* ##这是对接系统日志文件 Index name or pattern
##下面输入system-* 然后点最下面的create创建按钮 创建完成之后点击页面左上角的Discover界面就能看到system-*的信息
然后鼠标悬停再system-*下面一排里面的host上,会出现一个add按钮
点击add按钮,会发现右边界面只有time和host选项了,这样显示方式更友好
5.7 logstaicsearch对接apache日志文件,kibana可视化展示 (20.0.0.24)
[root@apache log]# cd /etc/logstash/conf.d/
[root@apache conf.d]# touch apache_log.conf
[root@apache 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 => ["20.0.0.10:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.10:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
宿主机访问12.0.0.22:9100
连接http://12.0.0.22:9200/
可以看到索引信息多了两条
apache_error-2020.10.29
apache_access-2020.10.29
再开一个网页访问20.0.0.40:5601
左边选项最后一个Management ----> Index Patterns ---->Create Index Pattern
分别创建 apache_access-* 和 apache_error-* 的索引
创建完之后要等一段时间才能有数据显示。