最近一方面给自己开发的平台套模板,一方面研究一些新的技术,比如今天介绍的elk,下面是介绍一下我是如何使用elk收集linux系统history与展示的。

一、效果图

下面是效果图,感觉满足你需求在继续看

wKioL1YfAU2jMKYsAAXAnHuyzeQ728.jpg

下面是具体介绍

1、Linux系统历史命令数据总量

wKiom1YfAZfSziq4AACjySrLFq0907.jpg

主要是展示所选时间段接收history数据总量,比如昨天我总共收集了1002条数据

2、Linux系统历史命令监控主机数量

wKioL1YfAhPB0bs4AACV6SfiWCk618.jpg

主要是监控总共有多少台主机开始收集history日志数据

3、LInux系统历史命令运行最多Top5

wKiom1YfAjTAwD9aAADoB6gywXQ361.jpg

主要是介绍运行最多的命令,比如第一个ll命令运行最多

4、Linux系统历史命令登陆主机Top5

wKioL1YfAomDAsxdAADlUVGCFMA501.jpg

主要是介绍登陆主机ip最多的前5个

5、Linux系统历史命令时间数据总量

wKiom1YfAqPzRkB7AAHNlXSdpH0389.jpg

主要介绍各时间段收集的数据总量

6、Linux系统历史命令数据

wKiom1YfAtTRHQGuAAQFedGroNw800.jpg

主要是展示每条收集数据内容,包括收集时间、收集的主机名、当前登陆ip、登陆用户、当前用户、运行命令。

二、logstash安装

我使用的elk架构如下

wKioL1YfA1_zpefQAAFY7Lj_vh0308.jpg

ps:这个图是网上找的

我的elk版本分别为

logstash 1.5.4-1

redis 3.0.4

elasticsearch 1.7.1

kibana 4.1.1

下面介绍如何安装elk

其实shipper与indexer的logstash安装一样,只不过是配置文件不一样

先介绍如何安装logstash

我使用yum安装,下面是安装yum源

1
2
3
4
5
6
7
8
cat  >> /etc/yum .repos.d /logstash .repo<EOF
[logstash-1.5]
name=Logstash repository  for  1.5.x packages
baseurl=http: //packages .elasticsearch.org /logstash/1 .5 /centos
gpgcheck=1
gpgkey=http: //packages .elasticsearch.org /GPG-KEY-elasticsearch
enabled=1
EOF

然后安装

yum install logstash -y

下面是shipper的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@puppet ~] # cat /etc/logstash/conf.d/logstash_agent.conf
input {
     file  {
         path => [ "/var/log/command.log" ]
   type  =>  "command"
   codec =>  "json"
     }
}
 
output {
redis {
 
host => [ "10.10.125.8:6379" ]
 
data_type => "list"
key =>  "logstash:redis"
 
}
 
}

这个配置就是收集/var/log/command.log的日志,这个日志是记录history命令的,output输出到redis服务。

下面是如何记录history历史命令

在/etc/bashrc里添加

1
2
3
4
5
6
7
HISTDIR= '/var/log/command.log'
if  [ ! -f $HISTDIR ]; then
touch  $HISTDIR
chmod  666 $HISTDIR
fi
export  HISTTIMEFORMAT= "{\"TIME\":\"%F %T\",\"HOSTNAME\":\"$HOSTNAME\",\"LI\":\"$(who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g')\",\"LU\":\"$(who am i|awk '{print $1}')\",\"NU\":\"${USER}\",\"CMD\":\""
export  PROMPT_COMMAND= 'history 1|tail -1|sed "s/^[ ]\+[0-9]\+  //"|sed "s/$/\"}/">> /var/log/command.log'

然后source /etc/bashrc

查看一下/var/log/command.log

wKiom1YfBVCj7xakAAiv_doGFP0568.jpg

是一个json格式的,包括时间、主机名、登陆ip、登陆用户、当前用户、命令

下面是indexer的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
09:25:19  # cat /etc/logstash/conf.d/logstash_indexer.conf
input {
   redis {
     host =>  "10.10.125.8"
     port =>  "6379"
     data_type =>  "list"
     key =>  "logstash:redis"
     type  =>  "redis-input"
   }
}
output {
     elasticsearch {
       host => "172.16.3.72"
       codec =>  "json"
       protocol =>  "http"
     }
     stdout {}
}

其中10.10.125.8是redis服务器,172.16.3.72是elasticsearch的ip

启动的话就使用/etc/init.d/logstash start

三、redis安装

1、下载

1
wget http: //download .redis.io /releases/redis-3 .0.4. tar .gz

2、解压

1
tar  zxvf redis-3.0.4. tar .gz -C  /usr/local/

3、安装

1
2
cd  /usr/local/redis-3 .0.4
make

4、复制程序变量

1
2
cp  src /redis-cli  /usr/bin
cp  src /redis-server  /usr/bin

5、创建目录

1
mkdir  conf log db data

6、配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[root@ip-10-10-125-8 redis-3.0.4] # cat conf/redis-6379.conf |grep -v "^#"|sed '/^$/d'
daemonize  yes
pidfile  /var/run/redis_6379 .pid
port 6379
bind 10.10.125.8
timeout 0
tcp-keepalive 0
loglevel notice
logfile  /var/log/redis/redis_6379 .log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error  yes
rdbcompression  yes
rdbchecksum  yes
dbfilename redis_6379.rdb
dir  /usr/local/redis-3 .0.4 /db/
slave-serve-stale-data  yes
slave- read -only  yes
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
lua- time -limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
hash -max-ziplist-entries 512
hash -max-ziplist-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set -max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing  yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync  yes

7、启动redis

1
redis-server  /usr/local/redis-3 .0.4 /conf/redis-6379 .conf

四、安装elasticsearch

1、安装

1
2
3
curl -L -O https: //download .elastic.co /elasticsearch/elasticsearch/elasticsearch-1 .7.1.zip
unzip elasticsearch-1.7.1.zip
cd   elasticsearch-17.1

2、配置

1
2
3
4
09:52:38  # grep -v "^#" config/elasticsearch.yml |sed '/^$/d'
cluster.name: dl-elk
node.name:  "elk-bj-1-server"
node.master:  true

就配置了集群命令与节点名字

3、启动

1
bin /elasticsearch  -d

这样elk就都安装完成了,我也没写的太详细,大家有需求可以自己查看官方介绍安装。

附件里我把我的Dashboard与相应视图都export了,大家需要可以自行import,但一定注意版本。

导入的顺序是:

1、Linux系统历史命令图形.json;

2、Linux系统历史命令搜索.json;

3、Linux系统历史命令数据视图.json.