一、配置 ELK 日志分析系统
1. 拓扑图

- 配置和安装 ELK 日志分析系统,安装集群方式,2个 elasticsearch节点, 并监控 tomcat 服务器日志
主机 | 操作系统 | IP地址 | 主要软件 |
---|
Node1 | Centos7.4 | 192. 168.8.15 | Elasticsearch、Kibana | Node2 | Centos7.4 | 192.168.8.16 | Elasticsearch | apache | Centos7.4 | 192.168.8.17 | Logstash |
2. 环境配置
- 关闭防火墙,更改主机名,查看主机映射,配置Java环境
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname apache
#node1和node2节点操作一样
vim /etc/hosts
192.168.8.15 node1
192.168.8.16 node2
上传jdk压缩包至opt目录下
tar xzvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_91 jdk
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
source /etc/profile
java -version
 
3. 安装 Elasticsearch(node1和node2)
#安装包放到opt目录下并解包
cd /opt/
rpm -ivh elasticsearch-5.5.1\(1\).rpm
#加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
#备份配置文件
cd /etc/elasticsearch/
cp elasticsearch.yml elasticsearch.yml.bak
#修改主配置文件
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 #不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
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"] #集群发现通过单播实现
#检查配置
grep -v "^#" /etc/elasticsearch/elasticsearch.yml

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
systemctl start elasticsearch.service
netstat -antp | grep 9200
 
- 查看节点信息,用宿主机浏览器打开 http://192.168.8.15:9200
 
浏览器打开
http:
http:


4. 安装 elasticsearch-head 插件
查看集群的方式可以通过安装插件来进行优化
#将软件包传至本目录下
cd /opt
yum install -y gcc gcc-c++.x86_64 ++ make
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j 4 && make install
#软件包传至src目录
cd /usr/local/src/
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
- ③ 安装 elasticsearch-head(数据可视化工具)
#将软件包传至src目录下
cd /usr/local/src/
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install


cd
vim /etc/elasticsearch/elasticsearch.yml
#在尾部添加配置
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" #跨域访问允许的域名地址
systemctl restart elasticsearch.service
cd /usr/local/src/elasticsearch-head/
npm run start &
netstat -lnupt |grep -E '9[1-2]00'
 
打开浏览器,访问 http://192.168.8.15:9100/ 然后在 Elasticsearch 后面的栏目中输入 http://192.168.8.15:9200,点击连接 查看群集颜色是否是健康的绿色 node2进行相同的操作
 
- 在 node1 上创建索引,索引名 index-demo,类型为test,可以看到成功创建
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"sb","mesg":"hello world"}'

可以看见索引默认被分片5个,并且有一个副本 点击数据浏览,会发现在node1上创建的索引为index-demo,类型为test这些相关的信息
 
5. 安装 logstash
- 192.168.8.17 上同样需要配置Java环境
hostnamectl set-hostname apache
yum install -y httpd
systemctl start httpd.service
systemctl status httpd.service

#将软件包传至opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
#建立软连接,方便系统识别
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

- ② 做对接测试 logstash(Apache)与 elasticsearch(node)功能是否正常
Logstash [选项] [对象]
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串 该字符串可以被当做logstash的配置(如果是" ",则默认使用stdin作为输入、stdout作为输出)
-t:测试配置文件是否正确,然后退出
logstash -e 'input { stdin{} } output { stdout{} }'
#输入内容
www.baidu.com

- ③ 使用 rubydebug 显示详细输出,codec 为一种编解码器
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.8.15:9200"] } }'
...
#输入内容
www.baidu.com
...

- ④ 使用浏览器访问 http://192.168.8.15:9100/ ,查看索引信息


- ⑤ 登录 Apache 主机做对接配置(Kibana)
#Logstash配置文件主要由三部分组成:input、output、filter(根据需要)
chmod o+r /var/log/messages
ll /var/log/messages

#配置文件中定义的是收集系统日志(system)
vim /etc/logstash/conf.d/system.conf
input {
file{
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["192.168.8.15:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
- ⑥ 浏览器访问 http://192.168.8.15:9100/ 查看索引信息

6. 安装 kibana (node1)
cd /usr/local/src/
#将软件包传至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.8.15:9200" #和elasticsearch建立联系
30行 kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
systemctl start kibana.service
systemctl enable kibana.service

7. 验证结果
- ② 浏览器访问 192.168.8.15:5601
首次登录创建一个索引 名字:system-*
①下面输入system-* ②然后点下面的出面的 create 按钮创建 ③点左上角的Discover按钮,会发现system-*信息 ④点下面的host旁边的add,会发现右面的图只有Time和host选项了


- ③ 对接 Apache 主机的 Apache 日志文件
Apache:192.168.8.17
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.8.15:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.8.15:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
/usr/share/logstash/bin/logstash -f apache_log.conf
① 浏览器访问 http://192.168.8.17,访问 apache
② 访问 http://192.168.8.15:9100/,查看索引信息
③ 访问 http://192.168.8.15:5601 点击左下角 management 选项 index patterns create index pattern 分别创建 "apache_error-"和"apache_access-"的索引
     
二、配置 EFK 日志分析系统
1. EFK 简介
收集日志的组件由 Logstash 替换成了 FileBeat,因为 Filebeat 相对于 Logstash 来说有2个好处: ① 侵入低,无需修改 elasticsearch 和 kibana 的配置; ② 性能高,IO 占用率比 logstash 小太多;
2. 环境部署

主机 | 操作系统 | IP地址 | 主要软件 |
---|
Node1 | Centos7.4 | 192. 168.8.15 | Elasticsearch、Kibana | Node2 | Centos7.4 | 192.168.8.16 | Elasticsearch | tomcat | Centos7.4 | 192.168.8.17 | filebeat、tomcat |
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
hostnamectl set-hostname node1
hostnamectl set-hostname node2
hostnamectl set-hostname tomcat
3. 安装 Elasticsearch(node1和node2)
vim /etc/hosts
192.168.8.15 node1
192.168.8.16 node2
上传jdk压缩包至opt目录下
tar xzvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
cd /usr/local/
mv jdk1.8.0_91 jdk
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
source /etc/profile
java -version
 
#安装包放到opt目录下并解包
cd /opt/
rpm -ivh elasticsearch-5.5.1\(1\).rpm
#加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
#备份配置文件
cd /etc/elasticsearch/
cp elasticsearch.yml elasticsearch.yml.bak
#修改主配置文件
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 #不在启动的时候锁定内存(前端缓存,与IOPS-性能测试方式,每秒读写次数相关)
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"] #集群发现通过单播实现
#检查配置
grep -v "^#" /etc/elasticsearch/elasticsearch.yml

mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
systemctl start elasticsearch.service
netstat -antp | grep 9200
 
- 查看节点信息,用宿主机浏览器打开 http://192.168.8.15:9200
 
浏览器打开
http:
http:


4. 安装 elasticsearch-head 插件
查看集群的方式可以通过安装插件来进行优化
#将软件包传至本目录下
cd /opt
yum install -y gcc gcc-c++.x86_64 ++ make
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j 4 && make install
#软件包传至src目录
cd /usr/local/src/
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
- ③ 安装 elasticsearch-head(数据可视化工具)
#将软件包传至src目录下
cd /usr/local/src/
tar zxvf elasticsearch-head.tar.gz
cd elasticsearch-head/
npm install


cd
vim /etc/elasticsearch/elasticsearch.yml
#在尾部添加配置
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" #跨域访问允许的域名地址
systemctl restart elasticsearch.service
cd /usr/local/src/elasticsearch-head/
npm run start &
netstat -lnupt |grep -E '9[1-2]00'
 
打开浏览器,访问 http://192.168.8.15:9100/ 然后在 Elasticsearch 后面的栏目中输入 http://192.168.8.15:9200,点击连接 查看群集颜色是否是健康的绿色 node2进行相同的操作
 
- 在 node1 上创建索引,索引名 index-demo,类型为test,可以看到成功创建
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"sb","mesg":"hello world"}'

可以看见索引默认被分片5个,并且有一个副本 点击数据浏览,会发现在node1上创建的索引为index-demo,类型为test这些相关的信息
 
5. 安装配置 Tomcat
192.168.8.17 上安装tomcat 在安装 Tomcat 之前必须先安装 JDK,因为 JDK 是 java 语言的软件包开发工具,其中包含了JVM(java 虚拟机),编写好的 java 源程序经过编译可形成 java 字节码,只要安装了 JDK ,就可用 JVM 解释这些字节码文件,从而保证了 java 的跨平台性。
#jdk和tomcat安装包放入opt目录下
rpm -ivh jdk-8u201-linux-x64.rpm
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar #可执行文件的位置
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile.d/java.sh
java -version
tar zxvf apache-tomcat-9.0.16.tar.gz #解包
mv apache-tomcat-9.0.16 /usr/local/tomcat #转移包位置并改名

ln -s /usr/local/tomcat/bin/startup.sh /usr/local/bin/
ln -s /usr/local/tomcat/bin/shutdown.sh /usr/local/bin/
#启动 tomcat 服务
startup.sh


6. 安装 filebeat
#安装包放在opt目录下
cd /opt
rpm -ivh filebeat-5.5.1-x86_64.rpm
cd /etc/filebeat/
cp filebeat.yml filebeat.yml.bak #对配置文件进行备份
vim /etc/filebeat/filebeat.yml #编辑配置文件
12 filebeat.prospectors:
18 - input_type: log
21 paths:
22 - /usr/local/tomcat/logs
#手动载入ES索引模板,成功会返回true
curl -XPUT 'http://192.168.8.15:9200/_template/filebeat?pretty' -d@/etc/filebeat/file
beat.template.json
#启动filebeat
/etc/init.d/filebeat start

- 使用浏览器访问 http://192.168.8.15:9100/ 查看索引信息

7. 安装 kibana (node1)
#软件包放在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.3.12:9200" #和elasticsearch建立联系
30行 kibana.index: ".kibana" #在elasticsearch中添加.kibana索引
systemctl start kibana.service
systemctl enable kibana.service

8. 验证结果
- 使用浏览器访问 192.168.8.15:5601

① 登录后创建一个索引 名字:filebeat-* ② 在下面输入ystem-* ③ 然后点最下面的出面的create 按钮创建 ④ 点最左上角的Discover按钮,会发现filebeat-*信息

总结
-
ELK 是由 ElasticSearch、 Logstash和Kiabana 三个开源工具组成的 -
分别的功能如下: ① ES(nosql非关数据库):存储功能和索引 ② Logstash(收集日志):到应用服务器上拿取log,并进行格式转换后输出到es中,通过input功能来收集/采集log ③ filter过滤器:格式化数据,output输出日志到 es 数据库内 ④ Kibana(展示工具):将es内的数据在浏览器展示出来,通过UI界面展示(可以根据自己的需求对日志进行处理,方便查阅读取) -
EFK 系统下的各个组件都非常吃内存,后期根据业务需要,EFK 的架构可进行扩展,当 FileBeat 收集的日志越来越多时,为防止数据丢失,可引入 Redis,而 ElasticSearch 也可扩展为集群,并使用 Head 插件进行管理, 所以要保证服务器有充足的运行内存和磁盘空间。
|