ELKstack日志收集系统
简介 ELKstack是由Elasticsearch、Logstash、Kibana三个开源软件组合而成的一款集分析、搜索、图形展示于一身的实施日志收集系统。各个组件的功能如下:Elasticsearch:日志分布式存储、搜索工具,支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。Logstash:日志收集工具,可以从本地磁盘或网络环境的服务器中收集各种文件,然后进行
简介
ELKstack是由Elasticsearch、Logstash、Kibana三个开源软件组合而成的一款集分析、搜索、图形展示于一身的实施日志收集系统。
各个组件的功能如下:
Elasticsearch:日志分布式存储、搜索工具,支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。
Logstash:日志收集工具,可以从本地磁盘或网络环境的服务器中收集各种文件,然后进行过滤分析,并将日志输入到Elasticsearch中。
Kibana:web界面可视化日志展示工具,对Elasticsearch中存储的日志进行展示。
从各个组件的功能可以看出日志收集到展示的整个过程如:
日志——>Logstash——>Elasticsearch——>Kibana
在日志量相对较大的环境中,由于ELKstack天然支持集群功能及各个组件的灵活使用,我们还可以进行如下改进:
日志——>Logstash——>redis/Kafaka——>Logstash——>Elasticsearch1+Elasticsearch2(集群)——>Kibana——>nginx
通过ELKstack,我们就再也不需要给开发人员copy日志了,直接在web界面上开个账户即可进行各种查询工作,大大减轻了运维的工作。
在此我们只介绍在普通环境下的部署及使用。
部署
准备
服务器列表
10.10.20.16 Elasticsearch+Kibana
10.10.20.17 nginx日志来源+Logstash软件列表
elasticsearch-1.7.3.tar.gz
logstash-2.0.0.tar.gz
kibana-4.1.2-linux-x64.tar.gz
安装
- 一.Elasticsearch
1.配置java环境,版本为8,如果为7出现告警信息无法启动
yum install -y java-1.8.0
[root@test local]# java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
2.安装并创建相关目录
wget https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.3.tar.gz
tar -zxvf elasticsearch-1.7.3.tar.gz -C /usr/local
cd /usr/local
ln -s /usr/local/elasticsearch-1.7.3 /usr/local/elasticsearch
cd /usr/local/elasticsearch
mkdir {data,work,logs,plugins}
3.修改配置文件
vim /usr/local/elasticsearch/config/elasticsearch.yml
#集群名字
cluster.name: elasticsearch
#集群中节点名,不可重复
node.name: "es-node1"
#是否是master节点
node.master: true
#节点是否存储数据
node.data: true
#索引分片的个数
index.number_of_shards: 5
#分片的副本个数
index.number_of_replicas: 1
#配置文件路径
path.conf: /usr/local/elasticsearch/config
#数据存放路径
path.data: /usr/local/elasticsearch/data
#工作路径
path.work: /usr/local/elasticsearch/work
#日志路径
path.logs: /usr/local/elasticsearch/logs
#插件路径
path.plugins: /usr/local/elasticsearch-1.7.3/plugins
#内存不向swap交还
bootstrap.mlockall: true
4.安装启动脚本
git clone https://github.com/elastic/elasticsearch-servicewrapper.git
mv elasticsearch-servicewrapper/service /usr/local/elasticsearch-1.7.3/bin/
[root@test service]# /usr/local/elasticsearch-1.7.3/bin/service/elasticsearch install
Detected RHEL or Fedora:
Installing the Elasticsearch daemon..
5.配置启动脚本并启动
[root@test service]# vim /usr/local/elasticsearch/bin/service/elasticsearch.conf
#设置ES的安装路径,必须和安装路径保持一致
set.default.ES_HOME=/usr/local/elasticsearch
#设置分配jvm内存大小
set.default.ES_HEAP_SIZE=1024
[root@test service]# /etc/init.d/elasticsearch start
Starting Elasticsearch...
Waiting for Elasticsearch......
running: PID:29823
[root@test service]# netstat -lntp | grep -E "9200|9300"
tcp 0 0 :::9200 :::* LISTEN 29825/java
tcp 0 0 :::9300 :::* LISTEN 29825/java
访问10.10.20.16:9200,检查elasticsearch是否启动正常。
注意:
1.由于我们在此只用了一个节点,没有使用集群,若要使用集群请在另一台服务器上按上述配置,但是注意节点名称不能够重复,如node.name: “es-node1”
2.官方还提供了一个ES集群管理插件,可以非常直观的查看ES状态信息,安装方法如下:
/usr/local/elasticsearch/bin/plugin -i mobz/elasticsearch-head
安装完成,访问安装head插件的ES服务器,即可查看集群信息:
其中:unassigned表示没有另一个集群节点,而nginx-2015-12和nginx-access-2015-12则是我通过logstash将nginx日志源写入ES的记录,下面我们再进行下一步吧。
- 二.Logstash
1.确认java环境
logstash也需要1.8的java环境,安装如上。
yum install -y java-1.8.0
[root@test1 local]# java -version
openjdk version "1.8.0_65"
OpenJDK Runtime Environment (build 1.8.0_65-b17)
OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)
[root@test1 logstash]# which java
/usr/local/jdk1.7.0_71/bin/java
注意:若我们服务器上本来有java环境,但版本不一致,我们需要安装后需要修改下logstash的相关启动设置,来使其使用java1.8的环境即可。
[root@test1 logstash]# vim /usr/local/logstash/bin/logstash.lib.sh
#添加以下一行即可
JAVA_HOME=/usr
2.下载安装并创建相关目录
wget https://download.elastic.co/logstash/logstash/logstash-2.0.0.tar.gz
tar -zxvf logstash-2.0.0.tar.gz -C /usr/local
cd /usr/local/
ln -sv logstash-2.0.0 logstash
cd /usr/local/logstash
#logs用于存放日志,etc用于存放配置文件
mkdir {logs,etc}
3.配置logstash启动脚本
[root@test1 local]#vim /etc/init.d/logstash
#!/bin/bash
#chkconfig: 2345 55 24
#description: logstash service manager
#logstash配置文件
FILE='/usr/local/logstash/etc/*.conf'
#指定logstash配置文件的命令
LOGBIN='/usr/local/logstash/bin/logstash agent --verbose --config'
#用锁文件配合服务启动与关闭
LOCK='/usr/local/logstash/locks'
#日志
LOGLOG='--log /usr/local/logstash/logs/stdou.log'
START() {
if [ -f $LOCK ];then
echo -e "Logstash is already \033[32mrunning\033[0m, do nothing."
else
echo -e "Start logstash service.\033[32mdone\033[m"
nohup ${LOGBIN} ${FILE} ${LOGLOG} &
touch $LOCK
fi
}
STOP() {
if [ ! -f $LOCK ];then
echo -e "Logstash is already stop, do nothing."
else
echo -e "Stop logstash serivce \033[32mdone\033[m"
rm -rf $LOCK
ps -ef | grep logstash | grep -v "grep" | awk '{print $2}' | xargs kill -s 9 >/dev/null
fi
}
STATUS() {
ps aux | grep logstash | grep -v "grep" >/dev/null
if [ -f $LOCK ] && [ $? -eq 0 ]; then
echo -e "Logstash is: \033[32mrunning\033[0m..."
else
echo -e "Logstash is: \033[31mstopped\033[0m..."
fi
}
TEST(){
${LOGBIN} ${FILE} --configtest
}
case "$1" in
start)
START
;;
stop)
STOP
;;
status)
STATUS
;;
restart)
STOP
sleep 2
START
;;
test)
TEST
;;
*)
echo "Usage: /etc/init.d/logstash (test|start|stop|status|restart)"
;;
esac
[root@test1 local]# chkconfig --add logstash
[root@test1 local]# chkconfig logstash on
4.编辑配置文件
[root@test1 ~]# vim /usr/local/logstash/etc/logstash.conf
input { #表示从标准输入中收集日志
stdin {}
}
output {
elasticsearch { #表示将日志输出到ES中
host => ["10.10.20.16:9200"] #可以指定多台主机,也可以指定集群中的单台主机
protocol => "http"
}
}
5.启动
#/etc/init.d/logstash或通过以下启动
[root@test1 ~]# /usr/local/logstash/bin/logstash -f /etc/logstash.conf
Logstash startup completed
hello world #这里是自己手动写入的内容
上面我们只是简单通过hello world来简单演示了下,下面我们需要通过kibana来展示。
- 三.Kibana
在此只部署单台的Kibana用于图形展示,当然我们还可以通过zookeeper来实现Kibana高可用集群。
1.下载并安装
wget https://download.elastic.co/kibana/kibana/kibana-4.1.2-linux-x64.tar.gz
tar -zxvf kibana-4.1.2-linux-x64.tar.gz -C /usr/local/
cd /usr/local
ln -sv kibana-4.1.2-linux-x64 kibana
2.修改配置文件
vim /usr/local/kibana/config/kibana.yml
#默认端口可以修改的
server.port: 5601
#kibana监听的ip
server.host: "0.0.0.0"
#由于es在本地主机上面,所以这个选项打开注释即可
elasticsearch.url: "http://localhost:9200"
3.启动脚本
[root@test ~]# vim /etc/init.d/kibana
#!/bin/bash
#chkconfig: 2345 55 24
#description: kibana service manager
KIBBIN='/usr/local/kibana/bin/kibana'
LOCK='/usr/local/kibana/locks'
START() {
if [ -f $LOCK ];then
echo -e "kibana is already \033[32mrunning\033[0m, do nothing."
else
echo -e "Start kibana service.\033[32mdone\033[m"
cd /usr/local/kibana/bin
nohup ./kibana & >/dev/null
touch $LOCK
fi
}
STOP() {
if [ ! -f $LOCK ];then
echo -e "kibana is already stop, do nothing."
else
echo -e "Stop kibana serivce \033[32mdone\033[m"
rm -rf $LOCK
ps -ef | grep kibana | grep -v "grep" | awk '{print $2}' | xargs kill -s 9 >/dev/null
fi
}
STATUS() {
Port=$(netstat -tunl | grep ":5602")
if [ "$Port" != "" ] && [ -f $LOCK ];then
echo -e "kibana is: \033[32mrunning\033[0m..."
else
echo -e "kibana is: \033[31mstopped\033[0m..."
fi
}
case "$1" in
start)
START
;;
stop)
STOP
;;
status)
STATUS
;;
restart)
STOP
sleep 2
START
;;
*)
echo "Usage: /etc/init.d/kibana (|start|stop|status|restart)"
;;
esac
[root@test ~]# /etc/init.d/kibana start
[root@test ~]# netstat -ntlp |grep :5601
tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 47145/./../node/bin
4.访问10.10.20.16:5601,检查kibana是否启动
ok,经过以上我们的ELK基础环境就搭建完毕了,至于ES集群,Kibana集群及redis/kafaka队列等我们就先不介绍了。下面我们就拿nginx日志来做下展示吧。
应用
说明:我们通过ELKstack环境收集nginx日志,来实现相关图形展示。
1.修改nginx的日志格式
通常情况下我们需要通过logstash对nginx日志进行切割,但是nginx支持json格式,这样省去了不少麻烦,还可以减少性能消耗。
log_format json '{"@timestamp":"$time_iso8601",'
# '"upstreamhost":"$upstream_addr",'
'"host":"$server_addr:$server_port",'
'"method":"$request_method",'
'"url":"$uri",'
# '"args":"$args"'
'"clientip":"$remote_addr",'
'"protocol":"$server_protocol",'
'"useragent":"$http_user_agent",'
'"referer":"$http_referer",'
'"http_host":"$host",'
'"status":"$status",'
# '"size":"$body_bytes_sent",'
# '"responsetime":"$request_time",'
'"cache_status":"$upstream_cache_status"}';
nginx -s reload重启
2.编辑logstash的配置文件
vim /usr/local/logstash/etc/logstash.conf
input {
file {
path => "/data/nginx/logs/access_java.log"
type => "nginx-access"
start_position => "beginning"
codec => "json"
}
}
output {
if [type] == "nginx-access" {
elasticsearch {
hosts => ["10.10.20.16:9200"]
index => "nginx-access-%{+YYYY-MM}"
}
}
}
/etc/init.d/logstash start启动
3.访问kibana
(1)setting界面下,创建Indices
注意: [nginx-access-]YYYY.MM 的格式必须和logstash配置文件output中type字段设置的格式一样。
(2)当上面这一步完成后,我们到Discover界面下,就可以看到访问记录了。
在这个界面下我们可以看到站点访问的实时日志,我们可以在搜索栏中搜索,如statsu:200,就会显示匹配访问状态码为200的所有访问记录了。
(3)到Visualize界面,我们来生成饼图,利用aggregation聚合来生成图形。
(4)到dashboard界面,来进行展示,下面是定义的几个图。
要生成各式各样的图片,我们需要掌握aggregation聚合器的使用,由于中文文档较少,我们需要到kibana官方文档去了解,地址:https://www.elastic.co/guide/en/kibana/4.1/index.html
另ELKstack的中文指南:http://kibana.logstash.es/content/
参考博客:
http://www.fblinux.com/?p=40
http://blog.sctux.com/?p=451
总结
通过以上介绍,我们对ELKstack的使用有了一个初步了解,但是要真正使用的生产环境中还有许多坑要填,希望大家通过实践慢慢去摸索。
更多推荐
所有评论(0)