目录
一、ELK概述
1、ELK日志分析系统8
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。
Elasticsearch概述
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。
LogStash概述
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。
Kibana概述
Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
2、ELK中日志处理步骤
第一步:将日志进行集中化管理(beats)
第二步:将日志格式化(Logstash),然后将格式化后的数据输出到Elasticsearch
第三步:对格式化后的数据进行索引和存储(Elasticsearch)
第四步:前端数据的展示(Kibana)
二、部署
主机 | 操作系统 | IP地址 | 软件 |
---|---|---|---|
node1 | CentOS7 | 192.168.109.12 | Elasticsearch/Kibana |
node2 | CentOS7 | 192.168.109.22 | Elasticsearch |
apache | CentOS7 | 192.168.109.32 | httpd / Logstash |
客户机 | (宿主机) | Windows10 | 192.168.109.132 |
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
hostnamectl set-hostname 主机名
1、配置elasticsearch环境
Node1
Node2
echo '192.168.109.12 node1' >> /etc/hosts
echo '192.168.109.22 node2' >> /etc/hosts
java -version #如果没有安装,yum -y install java
2、部署elasticsearch软件
Node1
Node2
上传elasticsearch-5.5.0.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm
#加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
#先做备份
#更改elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
#17行;取消注释,修改;集群名字
cluster.name: my-elk-cluster
#23行;取消注释,修改;节点名字(node2修改成node2)
node.name: node1
#33行;取消注释,修改;数据存放路径
path.data: /data/elk_data
#37行;取消注释,修改;日志存放路径
path.logs: /var/log/elasticsearch
#43行;取消注释,修改;不在启动的时候锁定内存
bootstrap.memory_lock: false
#55行;取消注释,修改;提供服务绑定的IP地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
#59行;取消注释;侦听端口为9200(默认)
http.port: 9200
#68行;取消注释,修改;集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
#检验配置
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
#创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
#启动elasticsearch是否成功开启
systemctl start elasticsearch
netstat -antp |grep 9200
客户机
#查看节点信息
http://192.168.109.12:9200
http://192.168.109.22:9200
#检验集群健康状态
http://192.168.109.12:9200/_cluster/health?pretty
http://192.168.109.22:9200/_cluster/health?pretty
#查看集群状态
http://192.168.109.12:9200/_cluster/state?pretty
http://192.168.109.22:9200/_cluster/state?pretty
3、安装elasticsearch-head插件
Node1
Node2
#编译安装node组件依赖包
yum -y install gcc gcc-c++ make
#上传软件包 node-v8.2.1.tar.gz 到/opt
cd /opt
tar xzvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure && make && make install
#这里耗时比较长估计20-30分钟
#安装phantomjs(前端框架)上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到/opt目录下
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
#安装elasticsearch-head(数据可视化工具)
上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
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: "*"
#-----------参数解释-----------------------------
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch.service
#启动elasticsearch-head,必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100
客户机
#使用elasticsearch-head插件查看集群状态
http://192.168.109.12:9100
在Elasticsearch 后面的栏目中输入
http://192.168.109.12:9200
http://192.168.109.22:9100
在Elasticsearch 后面的栏目中输入
http://192.168.109.22:9200
Node1
#创建索引
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
客户机
#打开浏览器输入地址,查看索引信息
http://192.168.109.12:9100
4、安装logstash(收集日志输出到elasticsearch中)
apache
#安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd
#安装Java环境
java -version ###如果没有装 安装yum -y install java
#安装logstash 上传logstash-5.5.1.rpm到/opt目录下
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
#建立logstash软连接
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
#测试logstash命令
#定义输入和输出流:输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
#使用rubydebug显示详细输出,codec为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.109.12:9200"] } }'
-----------------------------------------------------------------------
字段描述解释:
-f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
-t 测试配置文件是否正确,然后退出
客户机
#查看索引信息多出 logstash-日期
http://192.168.109.12:9100
apache
#Logstash配置文件主要由三部分组成:input、output、filter(根据需要)
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.109.12:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
systemctl restart logstash.service
客户机
#查看索引信息多出 system-日期
http://192.168.109.12:9100
5、安装kibana
node1
上传kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm
cd /etc/kibana/
cp kibana.yml kibana.yml.bak
vim kibana.yml
#2行;取消注释;kibana打开的端口(默认5601)
server.port: 5601
#7行;取消注释,修改;kibana侦听的地址
server.host: "0.0.0.0"
#21行;取消注释,修改;和elasticsearch建立联系
elasticsearch.url: "http://192.168.109.12:9200"
#30行;取消注释;在elasticsearch中添加.kibana索引
kibana.index: ".kibana"
systemctl start kibana.service
systemctl enable kibana.service
客户机
http://192.168.109.12:5601
首次登录创建一个索引 名字:system-* (这是对接系统日志文件)
然后点最下面的出面的create 按钮创建
apache
#对接Apache主机的Apache 日志文件(访问日志、错误日志)
cd /etc/logstash/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 => ["192.168.109.12:9200"]
index => "apache_access-%{+YYYY.MM.dd}"
}
}
if [type] == "error" {
elasticsearch {
hosts => ["192.168.109.12:9200"]
index => "apache_error-%{+YYYY.MM.dd}"
}
}
}
/usr/share/logstash/bin/logstash -f apache_log.conf
客户机
浏览器访问 http://192.168.109.12:9100 查看索引是否创建
打开浏览器 输入http://192.168.109.12:5601
单击“Create Index Pattern”按钮添加索引,在索引名中输入之前配置的 Output 前缀“apache_access”,并单击“Create”按钮。
分别创建apache_error-* 和 apache_access-* 的索引