文章目录
- ELK日志分析系统
- 一、概览
- 二、实验
- 1、实验准备
- 2、修改主机名修改域名配置文件(主机1和主机2)
- 3、安装rpm包(主机1和主机2)
- 4、加载系统服务(主机1和主机2)
- 5、更新elasticsearch主配置文件(主机1和主机2)
- 6、创建数据存放路径并授权(主机1和主机2)
- 7、启动elasticsearch是否成功开启(主机1和主机2)
- 8、查看节点信息
- 9、安装node工具软件(主机1和主机2)
- 10、安装phantomjs前端框架(主机1和主机2)
- 11、安装elasticsearch-head插件(主机1和主机2)
- 12、修改主配置文件(主机1和主机2)
- 13、启动elasticsearch-head服务器(主机1和主机2)
- 14、测试
- 15、安装Apache服务(apache)
- 16、安装logstash服务(apache)
- 17、输入采用标准输入输出采用标准输出(apache)
- 18、使用rubydebug显示详细输出,codec为一种编解码器(apache)
- 19、连接elasticsearch集群(apache)
- 20、测试
- 21、修改logstash配置(apache)
- 22、测试
- 23、安装kibana服务(kibana)
- 24、测试
- 25、对接apache主机的日志文件(apache)
- 26、测试
ELK日志分析系统
一、概览
1、日志服务器
提高安全性
集中存放日志
缺陷----------对日志的分析困难
2、ELK日志分析系统
- Elasticsearch
- Logstash
- Kibana
3、日志处理步骤
1.将日志进行集中化管理
2.将日志格式化(Logstash) 并输出到Elasticsearch
3.对格式化后的数据进行索引和存储(Elasticsearch)
4.前端数据的展示(Kibana)
4、Elasticsearch的概述
提供了一个分布式多用户能力的全文搜索引擎
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎.设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
5、Elasticsearch核心概念
- 接近实时
- 集群
- 节点
- 索引---------索引(库)→类型(表)→文档(记录)
- 分片和副本
6、Logstash介绍
- 一款强大的数据处理工具
- 可实现数据传输、格式处理、格式化输出
- 数据输入、数据加工(如过滤,改写等)以及数据输出
7、LogStash主要组件
- Shipper
- Indexer
- Broker
- Search and Storage
- Web Interface
8、Kibana介绍
- 一个针对Elasticsearch的开源分析及可视化平台
- 搜索、查看存储在Elasticsearch索弓|中的数据
- 通过各种图表进行高级数据分析及展示
9、Kibana主要功能
- Elasticsearch无缝之集成
- 整合数据,复杂数据分析
- 让更多团队成员受益
- 接口灵活,分享更容易
- 配置简单,可视化多数据源
- 简单数据导出
10、Elasticsearch的基础核心概念
1、接近实时(NRT)
elasticsearch是一个接近实时的搜索平台,这意味着,从索引一个文档直到这个文档能够被搜素到有-个轻微的延迟(通常是1秒)
2、集群(cluster)
一个集群就是由-一个或多个节点组织在- -起,它们共同持有你整个的数据,并-起提供索引和搜索功能。其中-个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,
集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。
一个集群可以只有一个节点。强烈建议在配置elasticsearch时, 配置成集群模式。
3、节点(node)
节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能。像集群-样,节点也是通过名字来标识,默认是在节点启动时随机分配的字符名。当然,你可以自己定义。该名字也很重要,在集群中用于识别服务器对应的节点。
节点可以通过指定集群名字来加入到集群中。默认情况,每个节点被设置成加入到elasticsearch集群。 如果启动了多个节点,假设能自动发现对方,他们将会自动组建一个名为elasticsearch的集群。
4、索引(index)
一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的素引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母的) , 并且当我们要对对应于这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,如果你想,可以定义任意多的索引。
●索引相对于关系型数据库的库。
5、类型(type)
在一个索引中,你可以定义一种或多种类型。一个类型是你的索引的一个逻辑上的分类/分区,其语义完全由你来定。通常,会为具有一组共同字段的文档定义一个类型。比如说,我们假设你运营一个博客平台并且将你所有的数据存储到一个索引中。
在这个索引中,你可以为用户数据定义一个类型,为博客数据定义另一个类型,当然,也可以为评论数据定义另一个类型。
●类型相对于关系型数据库的表
二、实验
1、实验准备
node1:192.168.150.154
node2:192.168.150.156
apache:192.168.150.147
kibana:192.168.150.144
setenforce 0 ##两台机器分别关闭防火墙
iptables -F
2、修改主机名修改域名配置文件(主机1和主机2)
主机1命令:
hostnamectl set-hostname node1
su
主机2命令:
hostnamectl set-hostname node2
su
下面命令两台主机相同
vim /etc/hosts ##在最后添加内容如下所示
192.168.150.154 node1
192.168.150.156 node2
scp /etc/hosts root@192.168.150.156:/etc/hosts ##同步到主机2
yes
Abc123
ping node2 #拼主机2是否拼通,拼通是正常的
java -version #检查java环境
3、安装rpm包(主机1和主机2)
cd /opt ##安装包上传到/opt目录下
rpm -ivh elasticsearch-5.5.0.rpm
4、加载系统服务(主机1和主机2)
systemctl daemon-reload ##加载系统服务
systemctl enable elasticsearch.service
5、更新elasticsearch主配置文件(主机1和主机2)
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak ##备份配置文件
vim /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"] ##集群发现通过单播实现
6、创建数据存放路径并授权(主机1和主机2)
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
7、启动elasticsearch是否成功开启(主机1和主机2)
systemctl start elasticsearch.service
netstat -antp | grep 9200
8、查看节点信息
用win10地址为192.168.150.162的浏览器打开地址:http://192.168.150.156:9200,下面是节点的信息
{
"name" : "node2",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "kugBeTURTWyusp48cyibGQ",
"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"
}
用win10地址为192.168.150.162的浏览器打开地址:http://192.168.150.154:9200,下面是节点的信息
{
"name" : "node1",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "kugBeTURTWyusp48cyibGQ",
"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"
}
健康检查访问地址:http://192.168.150.154:9200/_cluster/health?pretty
{
"cluster_name" : "my-elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
访问集群地址:http://192.168.150.156:9200/_cluster/state?pretty
{
"cluster_name" : "my-elk-cluster",
"version" : 3,
"state_uuid" : "sn26cldvSn61pv8xLLW5LA",
"master_node" : "h5wrJhg5TIq8kauW2I-Wvw",
"blocks" : { },
"nodes" : {
"FHlvzJz-TNaozR9UKXOtCA" : {
"name" : "node2",
"ephemeral_id" : "oE3W37yFSz--6hYxZONaGA",
"transport_address" : "192.168.150.156:9300",
"attributes" : { }
},
"h5wrJhg5TIq8kauW2I-Wvw" : {
"name" : "node1",
"ephemeral_id" : "hWnp-rglRci1Zb45PXpuVA",
"transport_address" : "192.168.150.154:9300",
"attributes" : { }
}
},
"metadata" : {
"cluster_uuid" : "kugBeTURTWyusp48cyibGQ",
"templates" : { },
"indices" : { },
"index-graveyard" : {
"tombstones" : [ ]
}
},
"routing_table" : {
"indices" : { }
},
"routing_nodes" : {
"unassigned" : [ ],
"nodes" : {
"FHlvzJz-TNaozR9UKXOtCA" : [ ],
"h5wrJhg5TIq8kauW2I-Wvw" : [ ]
}
}
}
9、安装node工具软件(主机1和主机2)
上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群
yum install gcc gcc-c++ make -y
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j3
make install
10、安装phantomjs前端框架(主机1和主机2)
cd /opt
tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
11、安装elasticsearch-head插件(主机1和主机2)
cd /opt
tar xzvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/
cd elasticsearch-head/
npm install
12、修改主配置文件(主机1和主机2)
cd ~
vim /etc/elasticsearch/elasticsearch.yml ##下面配置文件,插末尾
http.cors.enabled: true #开户跨域访问支持,默认为false
http.cors.allow-origin: "*" #跨域访问允许的域名地址
systemctl restart elasticsearch ##重启服务
13、启动elasticsearch-head服务器(主机1和主机2)
cd /usr/local/src/elasticsearch-head/
npm run start &
netstat -lnupt | grep 9100
netstat -lnupt | grep 9200
14、测试
win10访问地址:http://192.168.150.156:9100/
连接成功
创建索引信息,并插入数据
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"usr":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
15、安装Apache服务(apache)
yum install httpd -y ##安装apache服务
systemctl start httpd ##启动服务
ls /var/log/httpd/
cat /var/log/httpd/access_log
java -version
16、安装logstash服务(apache)
cd /opt
rpm -ivh logstash-5.5.1.rpm ##安装logstash
systemctl start logstash.service ##启动logstash
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##创建软链接
17、输入采用标准输入输出采用标准输出(apache)
logstash -e 'input { stdin{} } output { stdout{} }'
www.baidu.com ##需要输入www.baidu.com
www.sina.com.cn ##需要输入
18、使用rubydebug显示详细输出,codec为一种编解码器(apache)
logstash -e 'input { stdin{} } output { stdout { codec=>rubydebug } }'
www.baidu.com
19、连接elasticsearch集群(apache)
logstash -e 'input { stdin{} } output {elasticsearch{ hosts=>["192.168.150.154:9200"] } }'
www.baidu.com
www.sina.com.cn
www.google.com.cn
20、测试
浏览器输入:http://192.168.150.154:9100/
查看索引信息,多出 logstash-2020.09.15索引
21、修改logstash配置(apache)
chmod o+r /var/log/messages
ll /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.150.154:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
22、测试
打开浏览器访问:http://192.168.150.154:9100
多出system-2020.09.15
23、安装kibana服务(kibana)
上传安装文件到/usr/local/src目录下
cd /usr/local/src/
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 #kibana打开的端口
7/ server.host: "0.0.0.0" #kibana侦听的地址
21/ elasticsearch.url: "http://192.168.150.154:9200" #和elasticsearch建立联系
30/ kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
systemctl start kibana.service #启动kibana服务
systemctl enable kibana.service #开机启动
24、测试
浏览器输入:http://192.168.150.144:5601
首次登录创建一个索引名称:system-*
25、对接apache主机的日志文件(apache)
cd /etc/logstash/conf.d/
touch apache_log.conf
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.150.154:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.150.154:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
/usr/share/logstash/bin/logstash -f apache_log.conf
26、测试
打开浏览器访问:http://192.168.150.144:5601
能查看到索引apache_error-2020.09.15 apache_access-2020.09.15
查看apache主机上目录/etc/httpd/logs/下的两个日志文件