ELK日志分析
1. ELK日志分析系统简介
日志服务器
提高安全性
集中存放日志
缺陷
对日志的分析困难
1.1 日志的集中化管理
-
将日志进行集中化管理
-
将日志格式化(Logstash)并输出到Elasticsearch
-
对格式化后的数据进行索引和储存(Elasticsearch)
-
前段数据的展示(Kibana)
1.2 Elasticsearch的概述
提供了一个分布式多用户能力的全文搜索引擎
1.2.1 Elasticsearch核心概念
接近实时
集群
节点
索引
索引(库)—》类型(表)—》文档(记录)
分片和副本
1.3 logstash介绍
一款强大的数据处理工具
可实现数据传输,格式处理,格式化输出
数据输入,数据加工(如过滤,改写等)以及数据输出
1.3.1 logstash主要组件
shipper
lndexer
broker
search and storage
web interface
logstash agent 占资源多(只有这个拥有格式转换,特别重要)转换成es能识别的,在存在es中
filebeat 占资源少,现在用的比较多
1.4 kibana介绍
一个针对Elasticsearch的开源分析可视化平台
搜索,查看储存在Elasticsearch索引中的数据
通过各种图表惊醒高级 数据分析及展示
1.4.1 kibana主要功能
Elasticsearch无缝之集成
整合数据,复杂数据分析
让更多团队成员收益
接口灵活,分享更容易
配置简单,可视化多数数据源
简单数据导出
kafka 消息队列 es通过kafka传递信息给kabana (分布式存储)
处理高并发的,高吞吐的,少不了消息队列 ,现在用的最多的是kafka
1.5 服务优化
如何去实现多线程,迎接高并发量
缓存如何定期处理 ,swap用的硬盘 ,慢于内存
安全性上的优化
高并发来的时候,线程锁,特别是数据库
2. 部署ELK日志分析系统
2.1 案例需求
最少三台服务器
- 配置ELK日志分析群集
- 使用Logstash收集日志
- 使用Kibana查看分析日志
2.2 安装步骤
- 安装Elasticsearch软件
- 加载系统服务
- 更改Elasticsearch主配置文件
- 创建数据存放路径并授权
- 启动Elasticseach并查看是否成功开启
- 查看节点信息
2.3 实验
2.3.1 基础环境部署
登录20.0.0.15 更改主机名 配置域名解析 查看java环境,关闭防火墙和内核
[root@localhost ~]# systemctl stop firewalld.service ##关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service ##永不自启防火墙
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled ##永久关闭内核
[root@localhost ~]# setenforce 0 ###临时关闭内核
[root@localhost ~]# hostnamectl set-hostname node1 ##更该主机名
[root@localhost ~]# su ##刷新
[root@node1 ~]# vi /etc/hosts ##编辑域名解析
20.0.0.15 node1
20.0.0.16 node2
[root@node1 ~]# java -version ##查看一下java的版本
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)
登录20.0.0.16 更改主机名 配置域名解析 查看java环境,关闭防火墙和内核
[root@localhost ~]# systemctl stop firewalld.service ##关闭防火墙
[root@localhost ~]# systemctl disable firewalld.service ##永不自启防火墙
[root@localhost ~]# vi /etc/selinux/config
SELINUX=disabled ##永久关闭内核
[root@localhost ~]# setenforce 0 ###临时关闭内核
[root@localhost ~]# hostnamectl set-hostname node1 ##更该主机名
[root@localhost ~]# su ##刷新
[root@node1 ~]# vi /etc/hosts ##编辑域名解析
20.0.0.15 node1
20.0.0.16 node2
[root@node1 ~]# java -version ##查看一下java的版本
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)
2.3.2 部署elasticsearch软件
上传软件包到家目录下面
[oot@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm ##解压
加载系统服务
[root@node1 ~]# systemctl daemon-reload ##重新加载
[root@node1 ~]# systemctl enable elasticsearch.service ##永久自启
更改elasticsearch主配置文件
[root@node1 ~]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp -p elasticsearch.yml elasticsearch.yml.bak
[root@node1 elasticsearch]# vim 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 ##不在启动的时候锁定内存,锁定物理内存地址,防止es内存被交换出来
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"]
创建数据库存放路径并授权
[root@node1 elasticsearch]# mkdir -p /data/elk_data ##创建目录
[root@node1 elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/ ##该属主,属组关系
启动elasticsearch服务
[root@node1 elasticsearch]# systemctl start elasticsearch.service ##开启es服务
[root@node1 elasticsearch]# netstat -auntp | grep 9200 ###看服务是否开启
tcp6 0 0 :::9200 :::* LISTEN 51716/java
查看节点信息
用浏览器登录20.0.0.15:9200
查看群集健康状态
检查群集状态信息
编译安装node组件依赖包
[root@node1 elasticsearch]# yum -y install gcc gcc-c++ make ##安装编译器和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 ##编译
[root@node2 node-v8.2.1]# make install
安装phantomjs 前段框架
#####安装phantomjs #####前段框架
[root@node1 ~]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/
[root@node1 ~]# cd phantomjs-2.1.1-linux-x86_64/
[root@node1 phantomjs-2.1.1-linux-x86_64]# cd bin/
[root@node1 bin]# ll
total 66340
-rwxr-xr-x. 1 root root 67932064 Jan 25 2016 phantomjs
[root@node1 bin]# cp phantomjs /usr/local/bin/ ##命令系统可识别
elasticsearch-head 项目管理
[root@node1 ~]# tar zxvf elasticsearch-head.tar.gz ##加压
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
修改配置文件
[root@node1 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml ##最后面插入下面两句
http.cors.enabled: ture ##开启跨域访问支持,默认为false
http.cors.allow-origin: "*" ##跨域访问允许的域名地址
启动elasticsearch-head 启动服务器
[root@node1 elasticsearch-head]# systemctl restart elasticsearch.service
[root@node1 ~]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start & ##后台启动
[1] 97914
[root@node1 elasticsearch-head]#
> elasticsearch-head@0.0.0 start /root/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@node1 elasticsearch-head]# netstat -lunpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 97924/grunt
注意:第二台服务器重复以上操作
操作好之后,在其中一台输入
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
查看
2.3.3 部署logstash
关闭防火墙核心防护
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# vi /etc/selinux/config
[root@localhost ~]# setenforce 0
更改主机名
[root@localhost ~]# hostnamectl set-hostname apache
[root@localhost ~]# su
安装apache服务
[root@apache ~]# yum -y install httpd
[root@apache ~]# systemctl start httpd.service
安装java环境
[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)
安装logstash
[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/
logstash (Apache)与elasticsearch (node)功能是否正常,做对接测试####
Logstash这个命令测试
字段描述解释:
-f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e后面跟着字符串该字符串可以被当做logstash的配置(如果是"",则默认使用stdin做为输入、stdout作为输出)
-t 测试配置文件是否正确,然后退出
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{} }'
.....................................
11:45:09.769 [[main]-pipeline-manager] INFO logstash.pipeline - Pipeline main started
The stdin plugin is now waiting for input:
11:45:09.838 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
2020-10-29T03:45:45.373Z apache www.baidu.com
[root@apache ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }' ##rubydebug 显示详细信息 codec一种编解码器
...................................................
11:47:07.827 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com
{
"@timestamp" => 2020-10-29T03:47:14.047Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
stdin 标准性输入 stdout 标准性输出
[root@apache ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.15:9200"] } }' ###输出给20.0.0.15
..............................
查看索引信息
logstash配置文件
[root@apache ~]# chmod o+r /var/log/messages ##给其他用户读的权限
[root@apache ~]# ll /var/log/messages
-rw----r--. 1 root root 671312 Oct 29 11:59 /var/log/messages
[root@apache ~]# vi /etc/logstash/conf.d/system.conf
input {
file {
path => "/var/log/messages" ##日志路径
type => "system" ##类型
start_position => "beginning" ##从最开始开始
}
}
output {
elasticsearch {
hosts => ["20.0.0.15:9200"] ##对应主机es地址
index => "system-%{+YYY.MM.dd}" ##索引输出格式
}
}
[root@apache ~]# systemctl restart logstash.service
2.3.4 安装kabana
[root@node2 ~]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node2 ~]# cd /etc/kibana/
[root@node2 kibana]# ll
total 8
-rw-r--r--. 1 root root 4649 Jul 19 2017 kibana.yml
[root@node2 kibana]# cp -p kibana.yml kibana.yml.bak
2 server.port: 5601 ##打开端口号
7 server.host: "0.0.0.0" ###kibana倾听的地址
21 elasticsearch.url: "http://20.0.0.16:9200" ###和es建立连接
30 kibana.index: ".kibana" ###在es中添加kibana索引
[root@node2 kibana]# systemctl start kibana.service
[root@node2 kibana]# systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
测试
1.4.5 对接apache主机的apache日志文件
[root@apache ~]# cd /etc/logstash/conf.d/
[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 => ["20.0.0.15:9200"]
index => "apache_access-%{+YYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["20.0.0.15:9200"]
index => "apache_error-%{+YYY.MM.dd}"
}
}
}
[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf ##-f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
查看