Logstash:负责日志的收集,处理和储存
Elasticsearch:负责日志检索和分析
Kibana:负责日志的可视化
1. 系统环境:
[root@monitor ~]# cat /etc/redhat-release CentOS release 6.6 (Final)检测主机名
[root@monitor ~]# hostname -f monitor安装java
[root@monitor ~]# yum install java-1.8.0-openjdk 查看java版本 [root@monitor ~]# 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. 安装logstash
yum安装
[root@monitor ~]# yum install https://download.elastic.co/logstash/logstash/packages/centos/logstash-1.5.4-1.noarch.rpm创建证书
[root@monitor ~]# cd /etc/pki/tls [root@monitor tls]# openssl req -subj '/CN=monitor/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt Generating a 2048 bit RSA private key ...................................................+++ ...........................................................................................................+++ writing new private key to 'private/logstash-forwarder.key' -----同步证书到客户端
[root@monitor tls]# scp /etc/pki/tls/certs/logstash-forwarder.crt root@baicare:/etc/pki/tls/certs/创建patterns目录,并编写nginx-grok
[root@monitor tls]# mkdir /opt/logstash/patterns
[root@monitor tls]# vim /opt/logstash/patterns/nginx
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:slb_addr} - - \[%{HTTPDATE:time_local}\] "%{WORD:method} %{URIPATH:path}(?:%{URIPARAM:param})? HTTP/%{NUMBER:httpversion}" %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent} "%{IPORHOST:remote_addr}"
编辑配置文件
root@monitor tls]# vim /etc/logstash/conf.d/logstash.conf
input {
lumberjack {
port => 5000
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
add_field => [ "received_at", "%{@timestamp}" ]
add_field => [ "received_from", "%{host}" ]
}
syslog_pri { }
date {
match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
if [type] == "nginx" {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
}
output {
elasticsearch { host => localhost }
stdout { codec => rubydebug }
启动服务
[root@monitor ~]# /etc/init.d/logstash start [root@monitor ~]# chkconfig logstash on
3. 安装elasticsearch
yum安装
[root@monitor ~]# yum install https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.noarch.rpm添加到开机启动,并启动服务
[root@monitor ~]# chkconfig --add elasticsearch [root@monitor ~]# service elasticsearch start Starting elasticsearch: [ OK ] [root@monitor ~]# netstat -lutnp |grep java tcp 0 0 0.0.0.0:9300 0.0.0.0:* LISTEN 26898/java tcp 0 0 0.0.0.0:9200 0.0.0.0:* LISTEN 26898/java udp 0 0 0.0.0.0:54328 0.0.0.0:* 26898/java测试是否能正常访问
[root@monitor ~]# curl -X GET http://localhost:9200
{
"status" : 200,
"name" : "Conquistador",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "1.7.1",
"build_hash" : "b88f43fc40b0bcd7f173a1f9ee2e97816de80b19",
"build_timestamp" : "2015-07-29T09:54:16Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
4.安装kibana
下载源码包
[root@monitor ~]# wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-linux-x64.tar.gz解压并重命名
[root@monitor ~]# tar xf kibana-4.1.1-linux-x64.tar.gz -C /usr/local/ [root@monitor ~]# mv /usr/local/kibana-4.1.1-linux-x64 /usr/local/kibana编写启动脚本
[root@monitor ~]# vim /etc/rc.d/init.d/kibana
#!/bin/bash
# BEGIN INIT INFO
# Provides: kibana
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Runs kibana daemon
# Description: Runs the kibana daemon as a non-root user
### END INIT INFO
# Process name
NAME=kibana
DESC="Kibana4"
PROG="/etc/init.d/kibana"
# Configure location of Kibana bin
KIBANA_BIN=/usr/local/kibana/bin
# PID Info
PID_FOLDER=/var/run/kibana/
PID_FILE=/var/run/kibana/$NAME.pid
LOCK_FILE=/var/lock/subsys/$NAME
PATH=/bin:/usr/bin:/sbin:/usr/sbin:$KIBANA_BIN
DAEMON=$KIBANA_BIN/$NAME
# Configure User to run daemon process
DAEMON_USER=root
# Configure logging location
KIBANA_LOG=/var/log/kibana.log
# Begin Script
RETVAL=0
if [ `id -u` -ne 0 ]; then
echo "You need root privileges to run this script"
exit 1
fi
# Function library
. /etc/init.d/functions
start() {
echo -n "Starting $DESC : "
pid=`pidofproc -p $PID_FILE kibana`
if [ -n "$pid" ] ; then
echo "Already running."
exit 0
else
# Start Daemon
if [ ! -d "$PID_FOLDER" ] ; then
mkdir $PID_FOLDER
fi
daemon --user=$DAEMON_USER --pidfile=$PID_FILE $DAEMON 1>"$KIBANA_LOG" 2>&1 &
sleep 2
pidofproc node > $PID_FILE
RETVAL=$?
[[ $? -eq 0 ]] && success || failure
echo
[ $RETVAL = 0 ] && touch $LOCK_FILE
return $RETVAL
fi
}
reload()
{
echo "Reload command is not implemented for this service."
return $RETVAL
}
stop() {
echo -n "Stopping $DESC : "
killproc -p $PID_FILE $DAEMON
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f $PID_FILE $LOCK_FILE
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $PID_FILE $DAEMON
RETVAL=$?
;;
restart)
stop
start
;;
reload)
reload
;;
*)
# Invalid Arguments, print the following message.
echo "Usage: $0 {start|stop|status|restart}" >&2
exit 2
;;
esac
启动服务
[root@monitor local]# chmod +x /etc/rc.d/init.d/kibana [root@monitor local]# /etc/init.d/kibana start Starting Kibana4 : [确定] [root@monitor local]# chkconfig kibana on [root@monitor local]# netstat -lutnp |grep java tcp 0 0 0.0.0.0:9300 0.0.0.0:* LISTEN 26898/java tcp 0 0 0.0.0.0:9200 0.0.0.0:* LISTEN 26898/java udp 0 0 0.0.0.0:54328 0.0.0.0:* 26898/java
5. 配置nginx
编辑配置文件
[root@monitor vhost]# vim kibana.conf
server {
listen 80;
server_name kibana.baicare.com;
location / {
proxy_pass http://127.0.0.1:5601;
root /usr/local/kibana/src;
auth_basic "Restricted";
auth_basic_user_file /usr/local/nginx/conf/kibana.htpasswd;
}
}
创建登录账号密码
[root@monitor geoip]# htpasswd -c /usr/local/nginx/conf/kibana.htpasswd charlie New password: Re-type new password: Adding password for user charlie启动服务
[root@monitor vhost]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@monitor vhost]# nginx -s reload
以上是服务器端配置,下面是客户端配置
6. 安装logstash-forwarder
yum安装logstash-forwarder
[root@baicare ~]# yum install -y https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm
[root@baicare ~]# cp /etc/logstash-forwarder.conf /etc/logstash-forwarder.conf.bak
编辑配置
{
“network”: {
“servers”: [ “monitor:5000” ],
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
"timeout": 15
},
“files”: [
{
“paths”: [
“/var/log/messages”,
“/var/log/secure”
],
“fields”: { “type”: “syslog” }
}, {
“paths”: [
“/home/wwwlogs/access_nginx.log”
],
“fields”: { “type”: “nginx” }
}
]
}
启动服务
[root@baicare src]# /etc/init.d/logstash-forwarder start
logstash-forwarder started
然后打开浏览器,访问服务器(域名解析提前做好)
7. 配置索引模式


参考文章:
ELKstack 中文指南 - http://kibana.logstash.es/
三斗室 - http://chenlinux.com/
elastic - https://www.elastic.co/guide
LTMP索引 - http://wsgzao.github.io/index/#LTMP