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