ELK【Elasticsearch Logstash Kibana】日志分析系统及配置
文章目录
一、认识elk日志分析系统
当我们部署集群服务器的时候,日志文件就会散落在多台服务器上。查看日志信息就需要到各个服务器上去取和查看,我们把这些日志文件归集到一个地方统一管理。
这个时候ELK系统出现了,ELK是elasticsearch、Logstashh和Kibana三个系统的首字母组合。
当然ELK不只是查看日志功能这么简单,还有更多的应用。
【1】elasticsearch存储及索引
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
【2】logstash日志收集
Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
【3】kibana日志展示
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
【4】elk的作用及工作原理
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
二、部署elk日志分析系统
项目需求分析:
需要两台服务器分别作为elasticsearch服务端和elasticsearch负载端【这台上面要部署logstash服务】
服务端IP地址是:192.168.60.80
负载端IP地址是:192.168.60.90
在部署这个项目的时候会用到主机名,容易忽略
【1】elasticsearch部署
(1)修改服务端和负载端的主机名
hostnamectl set-hostname node1
hostnamectl set-hostname node2
(2)添加本地解析并关闭防火防护【//以下配置服务端和负载端配置一样】
vim /etc/hosts
192.168.60.80 node1
192.168.60.90 node2
systemctl stop firewalld
setenforce 0
(3)安装elasticsearch-5.5.0软件【这个需要上传软件包】并加载
rpm -ivh elasticsearch-5.5.0.rpm
systemctl daemon-reload
systemctl enable elasticsearch
(4)修改elasticsearch配置文件
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 | node2【在负载端中使用的主机名是node2】
33:path.data: /data/elk_data 【数据文件路径需要手动创建】
37:path.logs: /var/log/elasticsearch 【日志文件存放路径】
43:bootstrap.memory_lock: false 【不在启动的时候锁定内存】
55:network.host: 0.0.0.0 【任意网段服务】
59:http.port: 9200
68:discovery.zen.ping.unicast.hosts: ["node1", "node2"] 【集群通过单播发现】
(5)创建数据存放路径、修改属主属组和启动
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data
systemctl start elasticsearch【多启动几次】
netstat -natp | grep 9200
此时可以验证到节点elasticsearch的源码界面
(6)编译安装node软件包
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1
yum install -y gcc gcc-c++
./configure
make -j3 【时间较长】
make install
(7)安装phantomjs
yum install -y bzip2【最小化没由bzip2】
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
(8)安装elasticsearch_head
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src
cd /usr/local/src/elasticsearch-head/
npm install
vim /etc/elasticsearch/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
npm run start &
netstat -natp | grep 9100
systemctl restart elasticsearch【等待一会时间】
netstat -natp | grep 9200
(9)在浏览器上面访问192.168.60.80:9100就会出现node节点界面
(10)添加数据
先在索引界面中添加新索引index-demon,在使用下面的命令写入数据
curl -XPUT '192.168.60.80:9200/index-demon/test/1?pretty&pretty' -H 'content-Type:application/json' -d '{"user":"zhangsan"}'
再次刷新查看
【2】logstash部署
(1)关闭防火防护,安装Apache测试网站
systemctl stop firewalld
setenforce 0
yum install -y httpd
systemctl start httpd
(2)部署Java环境
yum install -y java【最小化没有Java环境,所以要安装】
java -version
(3)安装logstash软件包
rpm -ivh logstash-5.5.1.rpm
//优化命令
ln -s /usr/share/logstash/bin/logstash /usr/local/bin
【最小化没有自动加载安装systemd管理程序】
/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd
//启动服务
/bin/systemctl start logstash.service
(4)编写配置文件
cd /etc/logstash/conf.d
vim apache-log.conf
input {
file{
path => "/var/log/httpd/access_log"
type => "access"
start_position => "beginning"
}
file{
path => "/var/log/httpd/error_log"
type => "error"
start_position => "beginning"
}
}
output {
if [type] == "access" {
elasticsearch{
hosts => ["192.168.60.80:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch{
hosts => ["192.168.60.80:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
(5)启动logstash指定配置文件
//【如果需要在这台上面操作请另外启动一个终端】
logstash -f ./apache-log.conf //指定加载这个配置文件
让它处于这个连接状态,不然会断开web与kibana的连接
【3】kibana部署
(1)关闭防火防护安装kibana软件包
systemctl stop firewalld
setenforce 0
rpm -ivh kibana-5.5.1-x86_64.rpm
cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
(2)修改kibana配置文件,连接elasticsearch服务
vim /etc/kibana/kibana.yml
2:server.port: 5601
7:server.host: "0.0.0.0"
21:elasticsearch.url: "http://192.168.60.80:9200"
30:kibana.index: ".kibana"
(3)重新启动,查看端口号
systemctl start kibana.service
netstat -natp | grep 5601
【4】在浏览器上面访问192.168.60.80:9100会出现负载均衡节点界面和Apache日志索引
访问192.168.60.60:5601会出现kibana日志分析展示界面,注意在创建日志名称的时候要和elasticsearch上面的名称一致。
【5】补充知识logstash
(1)logstash命令的使用
-f 通过这个选项可以指定logstash的配置文件
-e 后面跟着字符串,该字符串可以被当做logstash的配置【默认使用stdin作为输入,stdout作为输出】
-t 测试配置文件是否正确,然后退出
(2)标准的输入输出
logstash -e 'input { stdin{} } output { stdout{} }'
####连接成功会出现successfully,下面就要直接输入#######
www.baidu.com
(3)使用rubydebug显示详细输出,codec是一种解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
####连接成功会出现successfully,下面就要直接输入#######
www.baidu.com
######唯一的区别是展示出现的结构不同#########
(4)使用logstash将信息写入elasticsearch中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.60.80:9200"] } }'
####连接成功会出现successfully,下面就要直接输入#######
www.baidu.com
www.kgc.com
www.tast.com
########在浏览器上面输入192.168.60.80:9100查看索引信息#######
三、故障问题解决方式
【问题一】重新启动elasticsearch服务器的时候9100端口无法启动,出现错误
分析:根据提示信息可知在root路径下面的package.json文件不存在,所以无法启动,找到package.json所在的路径下面进行启动。
【解决方案】进入package.json所在目录启动
【问题二】启动logstash的时候失败
分析:服务没有启动,根据报错提示没有找到logstash服务,所以应该创建这个管理服务的文件
【解决方案】创建管理服务
/usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd
//初始化logstash服务的启动命令脚本到systemd下面