ELK
- ELK基础知识
- ELK组成
- ELK处理步骤
- Elasticsearch核心知识
- 部署ELK日志分析系统
- 配置ES环境
- 部署apache服务器,安装Logstash
- 部署Kibana
ELK基础知识
概述:ELK是一种开源的实时日志分析系统,它能通过日志分析来帮助发现问题,解决系统故障,它由ElasticSearch(ES)、Logstash和Kibana组成
ELK组成
- ES:对logstash格式化的数据进行索引和存储
- logstash:收集日志、过滤、格式化,传输到ES上(如果是高并发则可以用filebeat工具来进行日志的收集)
- Kibana:展示日志分析结果
ELK处理步骤
- 通过logstash将日志收集,并格式化传输到ES上存储
- ES对格式化的数据进行索引和存储
- 通过Kibana来展示使用者观察
Elasticsearch核心知识
- 接近实时:它有索引标识数据,搜索的过着只有轻微的延迟(通常1秒)
- 集群:ES具有集群机制,节点通过集群名加入到集群中,同时在集群中的节点会有一个自己的唯一身份标识
- 索引:这里的索引有点类似于关系型数据库中的库,它由一个拥有积分相似特征的文档的集合,索引名必须小写字母标识
- 文档:一个文档是一个可被索引的基础信息单元,
- 类型:在一个索引中,可以定义一种或多种类型,它是索引上的一个逻辑分类或分区,类似于关系型数据库中的表
- 分片和分片副本:分片是防止数据过大不易存储在单个节点,影响搜索,它提高性能和吞吐量,进行水平分割拓展,增大存储量,分片副本是放在单个分片或节点故障,丢失数据,它增加了冗余性,高可用性,默认情况下,ES每个索引被分片5个主分片和一个副本
部署ELK日志分析系统
设备准备:
- ES服务器:node1 ,软件,Elasticsearch,Kibana,192.168.118.11
- ES服务器,node2,软件,Elasticsearch,192.168.118.22
- Logstash服务器,node3,软件,Logstash,Apache,192.168.118.33
配置ES环境
- 配置JDK环境
node1:
[root@node1 opt]# vim /etc/hosts
192.168.118.11 node1
192.168.118.22 node2
[root@node1 opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@node1 opt]# vim /etc/profile #修改配置文件
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
[root@node1 ~]# source /etc/profile
node2:
[root@node2 opt]# vim /etc/hosts
192.168.118.11 node1
192.168.118.22 node2
[root@node2 opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@node2 opt]# vim /etc/profile #修改配置文件
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
[root@node2 jdk]# source /etc/profile
- 部署Elasticsearch(node1和node2节点部署一样,node2改下节点名称即可)
node1:
[root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm
[root@node1 opt]# systemctl daemon-reload #加载后台进程
[root@node1 opt]# systemctl enable elasticsearch.service #开启elasticsearch
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@node1 opt]# cd /etc/elasticsearch/
[root@node1 elasticsearch]# cp elasticsearch.yml elasticsearch.yml.bak
[root@node1 elasticsearch]# vim elasticsearch.yml #修改配置文件
[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]# ll -d /data/elk_data/
drwxr-xr-x. 2 elasticsearch elasticsearch 6 8月 14 10:55 /data/elk_data/
[root@node1 elasticsearch]# systemctl start elasticsearch.service
[root@node1 elasticsearch]# netstat -antp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 81615/java
- 在浏览器上查看
- 查看集群健康状态,两个节点正常运行
- 查看集群状态信息
- 安装各种工具,以方便查看浏览器
node1和node2配置一样:
##安装node组件依赖包
[root@node1 opt]# tar xzvf node-v8.2.1.tar.gz
[root@node1 node-v8.2.1]# yum -y install gcc gcc-c++ make
[root@node1 opt]# cd node-v8.2.1/
[root@node1 node-v8.2.1]# ./configure
[root@node1 node-v8.2.1]# make -j3
[root@node1 node-v8.2.1]# make install
##安装phantomjs前端框架
[root@node1 node-v8.2.1]# cd /usr/local/src/ #将软件包下载到此目录然后解压
[root@node1 src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
[root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin
[root@node1 bin]# cp phantomjs /usr/local/bin
##安装elasticsearch-head
[root@node1 src]# cd /usr/local/src
[root@node1 src]# tar xzvf elasticsearch-head.tar.gz
[root@node1 src]# cd elasticsearch-head/
[root@node1 elasticsearch-head]# npm install
##修改主配置文件
[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 #重启服务
[root@node1 elasticsearch-head]# netstat -antp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 128499/java
##启动elasticsearch-head服务器
[root@node1 elasticsearch-head]# npm run start & #让head在后台运行
[1] 128588
[root@node1 elasticsearch-head]# netstat -antp | grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 128598/grunt
- 在浏览器上查看
- 在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
}
- 刷新浏览器查看
- 查看索引信息
部署apache服务器,安装Logstash
[root@appche ~]# yum install -y httpd
[root@appche ~]# systemctl start httpd
##部署Java环境
[root@appche opt]# tar zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local
[root@appche opt]# cd /usr/local
[root@appche local]# ls
bin etc games include jdk1.8.0_91 lib lib64 libexec sbin share src
[root@appche local]# mv jdk1.8.0_91/ jdk
[root@appche opt]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
[root@appche opt]# cd /opt
[root@appche opt]# rpm -ivh logstash-5.5.1.rpm
[root@appche opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
[root@appche opt]# cd /usr/local
[root@appche local]# ls
bin etc games include jdk1.8.0_91 lib lib64 libexec sbin share src
[root@appche local]# mv jdk1.8.0_91/ jdk
[root@appche opt]# systemctl start logstash.service
[root@appche opt]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.
##输入标准输出
[root@appche ~]# logstash -e 'input { stdin{} } output { stdout{} }'
…………………………
www.baidu.com #输入百度网址
2021-08-14T12:21:46.662Z appche www.baidu.com
##使用rubydebug显示详细输出
[root@appche ~]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug} }'
…………………………
www.baidu.com #输入百度网站查看
{
"@timestamp" => 2021-08-14T12:24:31.885Z,
"@version" => "1",
"host" => "appche",
"message" => "www.baidu.com"
}
##使用logstash将信息写入ES数据库中
[root@appche ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.118.11:9200"] } }'
………………………………
20:28:12.680 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com #输入内容
www.google.com.cn #输入内容
- 刷新浏览器查看会发现有新的logstash信息
- 在apache上做对接配置,收集系统日志
[root@appche ~]# chmod o+r /var/log/messages
[root@appche ~]# cd /etc/logstash/conf.d/
[root@appche conf.d]# vim system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.118.11:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
[root@appche conf.d]# systemctl restart logstash.service #重启logstash
- 查看网页
部署Kibana
- 这里直接在ES服务器上安装Kibana
[root@node1 opt]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 opt]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vim kibana.yml #修改配置文件
[root@node1 kibana]# systemctl start kibana.service #开启Kibana
[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.
- 在浏览器上查看
- 在Kibana上输入索引查看