ELK日志分析和管理
ELK日志分析和管理
ELK的组成
ELK=Elasticsearch+Logstash+Kibana
- Logstash:日志的手机和输出
- Elasticsearch:是一个数据库
- Kibana:做出展示
ELK日志分析系统简介
- 日志服务器
1.提高安全性
2.集中 存放日志
缺陷对日志的分析困难
- ELK日志分析系统
Elasticsearch
Logstash
Kibana
- 日志处理步骤
1.将日志进行集中化管理
2.志格式化(Logstash)并输出到Elasticsearch
3.对格式化后的数控进行索引好人存储(Elasticsearch)
4.前段的数据的展示(Kibana)
Elasticsearch的介绍
- Elasticsearch的概述
提供一个分布式多用户能力的全文搜索引擎
- Elasticsearch核心概念
1.接近实时
Elasticsearch是一个接近实时的搜索的平台。有轻微延迟 通常1秒)
2.集群
一个集群就是有一个或者多个节点组织在一起,他们共同持有你整个的数据,并一起提供索引和搜索功能
3.节点
节点就是一台单一的服务器,是群集的一部分,存储数据并参与集群的索引和搜索功能。想群集一样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义,改名字也很重要,在集群中用于识别服务器对应的节点。节点可以通过指定集群名字来加入到集群中,默认情况,每个节点被设置成加入到Elasticsearch集群。如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为Elasticsearch的集群。
4.索引
一个索引就是一个拥有几分相似特征的文档的集合。一个索引由一个名字来标识(必须全部是小写字母)并且当我们要对对应于这个索引中文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想你可以定义任意多个的索引。
5.分片和副本
分片:1.水平分割扩展,增大存储量
2.分布式并行跨分片操作,提高性能和吞吐量。
副本:1.高可用性,以应对分片或者节点故障,处于这个原因,分片副本要在不同的节点上。
2高可用能,增大吞吐量,搜索可以在并行在所有副本上执行。
Logstash介绍
- Logstash
1.一款强大的数据处理工具
2.可实现数据传输、格式化处理。格式化输出
3.数据输入、数据加工(如过滤、改写等)以及数据输出
- Logstash主要组建
Shipper:日志收集者,负责监控本日志文件的变化,及时把日志文件的最新内容收集起来,通常远程代理端(agent)只需要运行这个组件即可;
Indexr:日志存储者,负责连接日志并写入到本地文件。
Broker:日志Hub,负责连接多个Shipper和和多个Indexer
Search and Storage:允许对事件进行搜索和存储;
Web Interface:基于web的展示界面
- Logstash 简单的理念
1.Collect:数据输入
2.Enrich:数据加工、如过滤,改写符
3.Transport:数据输出(被其他模块进行调用)
Kibana
- Kibana介绍
1.一个针对Elasticsearch的开源分析及可视化平台
2.搜索、查看存储在Elasticsearch索引中的数据
3.通过各种图表进行高级数据分析及展示
- Kibana主要功能
1.Elasticsearch无缝之集成
2.整合数据、复杂数据分析
3.让跟多团队成员收益
4.接口灵活、分享更容易
5.配置简单、可视化多数据源
6.简单数据导出
简单的ELK项目
apache ip :20.0.0.13
node1 ip: 20.0.0.14
node2 ip: 20.0.0.15
[root@apache ~]# vi /etc/hosts (所有机子都要进行这项操作)
20.0.0.13 apache
20.0.0.14 node1
20.0.0.15 node2
node1 与node2 相同操作
[root@node1 ~]# unzip elk.zip
[root@node1 ~]# cd elk/
[root@node1 elk]# rpm -ivh elasticsearch-5.5.0.rpm
[root@node1 elk]# cd /etc/elasticsearch/
[root@node1elasticsearch]#cp elasticsearch.yml elasticsearch.yml.bak#备份
[root@node1 elasticsearch]# vim elasticsearch.yml#修改配置参数
17 cluster.name: my-elk-cluster
23 node.name: node1
32 path.data: /data/elk_data
37 path.logs: /var/log/elasticsearch/
43 bootstrap.memory_lock: false
55network.host: 0.0.0.0
59 http.port: 9200
68 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
[root@node1 elasticsearch]# grep -v "^#"/etc/elasticsearch/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"]
[root@node1 elasticsearch]# mkdir -p /data/elk_data#递归创建
[root@node1 elasticsearch]# chown elasticsearch:elasticsearch /data/elk_data/ #给与权限
[root@node1 elasticsearch]# systemctl start elasticsearch
[root@node1 elasticsearch]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 13707/java
浏览器 输入:20.0.0.14:9200
{ "name" : "node1", "cluster_name" : "my-elk-cluster", "cluster_uuid" : "cDpw29cVRiCpKo9AFzW20A", "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" }
健康检查
检查群集状态信息
安装elasticsearch-head插件
**为了方便管理 **
1.安装一栏环境(node1 和node2 一样操作)
[root@glt6 elk]# yum install gcc gcc-c++ make -y
2.编译安装node组件依赖包
[root@glt6 elk]# tar zxvf node-v8.2.1.tar.gz
[root@glt6 elk]# cd node-v8.2.1/
[root@glt6 node-v8.2.1]# ./configure
[root@glt6 node-v8.2.1]# make && make install
安装phantomjs前端框架
[root@node2 elk]# tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/ #解压缩
拷贝到本机目录下,方便使用命令
[root@node2 elk]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/
[root@node2 bin]# cp phantomjs /usr/local/bin/
[root@node2 elasticsearch-head]# npm install
安装elasticsearch数据可视化工具
[root@node2 elk]# tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/
cd elasticsearch-head/
npm install
编辑主配置文件
[root@node2 elasticsearch-head]# vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true #末尾添加
http.cors.allow-origin: "*"#末尾添加
[root@node2 elasticsearch-head]# systemctl restart elasticsearch.service
[root@node2 elasticsearch-head]# npm run start &
[root@node2 elasticsearch-head]# netstat -anpt | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 98554/java
[root@node2 elasticsearch-head]# netstat -anpt | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 98652/grunt
浏览器上输入
g-blog.csdnimg.cn/20210108085748717.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDM0NjkwMg==,size_16,color_FFFFFF,t_70)
node1上查看添加的索引
[root@node1 elasticsearch-head]# 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
}
-XPUT ‘localhost:9200:指定在本地
/index-demo/test/:索引中建立test
1?pretty&pretty’:问好后面跟一些参数
application/json:以json格式插入数据
证明es中可以存储数据,可以使用
第三台主机安装logstash
做一些日志搜集输出到elasticsearch中
在apache主机上
[root@apache ~]# yum -y install httpd
[root@apache ~]# unzip elk.zip
[root@apache ~]# cd elk/
[root@apache elk]# rpm -ivh logstash-5.5.1.rpm
[root@apache elk]# systemctl start logstash.service
[root@apache elk]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
创建软连接,将命令连接到本机bin目录下
[root@apache elk]# 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 elk]# logstash -e 'input { stdin{} } output { stdout{} }'
00:39:41.237 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}#输入网址
www.baidu.com
2021-01-05T16:35:07.633Z apache www.baidu.com
www.sina.com
2021-01-05T16:35:26.921Z apache www.sina.com
[root@apache elk]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
证实logstash可进行格式化输出
www.baidu.com
{
"@timestamp" => 2021-01-05T16:39:49.486Z,
"@version" => "1",
"host" => "apache",
"message" => "www.baidu.com"
}
使用logstash将信息写入到elasticsearch
[root@apache elk]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["20.0.0.14:9200"] } }'
01:11:13.182 [Api Webserver] INFO logstash.agent - Successfully
started Logstash API endpoint {:port=>9600}
www.baidu.com
www.sina.com
打开浏览器集群http://20.0.0.14:9200/
证实,数据出口导向可对接上es,并且成功完成分片及副本
在apache主机做对接配置
1查看apache日志
为other添加可读权限
[root@apache ~]# cd /var/log/
[root@apache log]# ll
[root@apache log]# chmod o+r messages
[root@apache log]# cd /etc/logstash/conf.d/
[root@apache conf.d]# vim system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["20.0.0.14:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
在node1上装kibana
[root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 elk]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak#备份数据
[root@node1 kibana]# vim kibana.yml
2 server.host: "0.0.0.0"
7 server.host: "0.0.0.0"
21 elasticsearch.url: "http://20.0.0.14:9200"
30 kibana.index: ".kibana"
[root@node1 kibana]# systemctl start kibana.service //重启服务
[root@node1 kibana]# systemctl enable kibana.service //设置开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
做一个时间同步
对接apache主机的apache日志文件(访问、错误的)
在apache主机
[root@apache ~]# cd /etc/logstash/
[root@apache logstash]# cd conf.d/
[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.15: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]# logstash -f apache_log.conf #apache_log.conf 是在con.f 的路径下所以可以使用相对路径 否则使用绝对路径
需要在浏览器上输入Apache的地址使其有日志记录