月度归档:2017年11月

使用 vnStat 查看 Linux Centos 7网卡实时带宽流量

介绍:

vnStat是一个用于LinuxBSD 基于控制台的网络流量监视器,用于保留所选接口的网络流量日志。它使用内核提供的网络接口统计信息作为信息源。这意味着vnStat实际上并不会嗅探任何流量,并且还可以确保轻松使用系统资源。
在本文中,我们将介绍如何在RHEL/CentOS linux发行版上安装和使用vnStat(网络流量监控器)。

vnstat功能:

  • 简单快速的安装和运行。
  • 通过系统重新引导收集统计数据。
  • 可以同时监视多个网络网卡接口。

输出选项:

  • 总计、每小时、每天、每周、每月、前10天。
  • 可选的png图像输出(使用libgd)。
  • 可以配置几个月来跟踪账单周期。
  • 最小的资源使用情况。
  • 较低的cpu使用率。
  • 可以在没有root权限的情况下使用。

1.安装:

$ yum -y install epel-release
$ yum -y install vnstat

一旦安装成功,默认配置适用于大多数人。默认监控eth0网络网卡接口上的数据流量。如果需要更改网络接口,则需要编辑 /etc/vnstat.conf 里面有详细相关参数。

2.启动vnstat服务并加入开机自启:

$ systemctl restart vnstat
$ systemctl enable vnstat

3.现在可以使用vnstat相关命令管理了

示例1:

$ vnstat
rx      /      tx      /     total    /   estimated
eth0: Not enough data available yet.
eth1: Not enough data available yet.

提示没有足够的数据显示,过一会再尝试:

$ vnstat
                      rx      /      tx      /     total    /   estimated
eth0:
    10月 '17       28.32 MiB  /    2.14 MiB  /   30.46 MiB  /   31.00 MiB
         today     28.32 MiB  /    2.14 MiB  /   30.46 MiB  /      41 MiB

eth1:
    10月 '17           0 KiB  /      32 KiB  /      32 KiB  /       0 KiB
         today         0 KiB  /      32 KiB  /      32 KiB  /      --

可以看到以上数据已经产生。

示例2:

查看某个网卡的带宽数据流量使用情况。

$ vnstat -i eth0
Database updated: Mon Oct 30 17:09:50 2017

eth0 since 2017年10月30日

       rx:  42.46 MiB      tx:  3.12 MiB      total:  45.59 MiB

monthly
                rx      |     tx      |    total    |   avg. rate
------------------------+-------------+-------------+---------------
10月 '17      42.46 MiB |    3.12 MiB |   45.59 MiB |    0.15 kbit/s
  ------------------------+-------------+-------------+---------------
estimated        44 MiB |       3 MiB |      47 MiB |

daily
                rx      |     tx      |    total    |   avg. rate
------------------------+-------------+-------------+---------------
    today     42.46 MiB |    3.12 MiB |   45.59 MiB |    6.04 kbit/s
------------------------+-------------+-------------+---------------
estimated        58 MiB |       4 MiB |      62 MiB |

4.更多显示命令可查看 --help 示例如下:

$ vnstat --longhelp
 vnStat 1.15 by Teemu Toivola 

Query:
      -q, --query           query database
      -h, --hours           show hours
      -d, --days            show days
      -m, --months          show months
      -w, --weeks           show weeks
      -t, --top10           show top 10 days
      -s, --short           use short output
      -ru, --rateunit       swap configured rate unit
      --oneline             show simple parseable format
      --exportdb            dump database in text format
      --importdb            import previously exported database
      --json                show database in json format
      --xml                 show database in xml format
Modify:
      --create              create database
      --delete              delete database
      -u, --update          update database
      -r, --reset           reset interface counters
      --sync                sync interface counters
      --enable              enable interface
      --disable             disable interface
      --nick                set a nickname for interface
      --cleartop            clear the top 10
      --rebuildtotal        rebuild total transfers from months
Misc:
      -i,  --iface          select interface (default: eth0)
      -?,  --help           short help
      -D,  --debug          show some additional debug information
      -v,  --version        show version
      -tr, --traffic        calculate traffic
      -l,  --live           show transfer rate in real time
      --style               select output style (0-4)
      --iflist              show list of available interfaces
      --dbdir               select database directory
      --locale              set locale
      --config              select config file
      --savemerged          save merged database to current directory
      --showconfig          dump config file with current settings
      --testkernel          check if the kernel is broken
      --longhelp            display this help

See also "man vnstat".

vnStat是一个不错的网卡流量查看软件,应用广泛,建议尝试使用。

Git 常用基本命令使用方法一览

1.创建版本库

$ git clone                      #克隆远程版本库
$ git init                       #初始化本地版本库

2.修改&提交

$ git status                     #查看状态
$ git diff                       #查看变更内容
$ git add .                      #跟踪所有改动过的文件
$ git add                        #跟踪指定的文件
$ git mv                         #文件改名
$ git rm                         #删除文件
$ git rm --cached                #停止跟踪文件但不删除
$ git commit -m "commit message" #提交所有更新过的文件
$ git commit --amend             #修改最后一次提交

3.查看提交历史

$ git log                        #查看提交历史
$ git log -p                     #查看指定文件的提交历史
$ git blame                      #以列表方式查看指定文件的提交历史

4.撤消

$ git reset --hard HEAD          #撤消工作目录中所有未提交文件的修改内容
$ git checkout HEAD              #撤消指定的未提交文件的修改内容
$ git revert                     #撤消指定的提交

5.分支与标签

$ git branch                     #显示所有本地分支
$ git checkout <branch/tag>      #切换到指定分支或标签
$ git branch                     #创建新分支
$ git branch -d                  #删除本地分支
$ git tag                        #列出所有本地标签
$ git tag                        #基于最新提交创建标签
$ git tag -d                     #删除标签

6.合并与衍合

$ git merge                      #合并指定分支到当前分支
$ git rebase                     #衍合指定分支到当前分支

7.远程操作

$ git remote -v                  #查看远程版本库信息
$ git remote show                #查看指定远程版本库信息
$ git remote add                 #添加远程版本库
$ git fetch                      #从远程库获取代码
$ git pull                       #下载代码及快速合并
$ git push                       #上传代码及快速合并
$ git push :<branch/tag-name>    #删除远程分支或标签
$ git push --tags                #上传所有标签

MongoDB数据库定时自动备份Shell脚本

近期在生产环境中碰到MongoDB数据库备份问题,所以整理了一下脚本,大家拿去尽管享用。

MongoDB中创建备份账号

使用管理员账号登录MongoDB数据库:

[root@renwolecomdbs /]$ mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
> use admin
switched to db admin

认证:

> db.auth("admin","KM5d9KhJcW7O0lIAT")
1

下面开始创建MongoDB备份专有账号:

> db.createUser(
  {
    user: "renwolebackup",
    pwd: "RenwoleComACC",
    roles: [ { role: "backup", db: "admin" } ]
  }
)
> exit

创建备份脚本存放目录及文件

$ mkdir -p /etc/init.d/mongo
$ mkdir -p /apps/data/mongobackup_db
$ vim /etc/init.d/mongo/mongo-bak

添加以下内容:

#!/bin/bash  
sourcepath=''
targetpath='/apps/data/mongobackup_db'
nowtime=$(date +%Y%m%d)
start()
{
  ${sourcepath}mongodump --host 127.0.0.1:27017 -u renwolebackup -p renwolebackup --out ${targetpath}/${nowtime}
}
execute()  
{
  start
  if [ $? -eq 0 ]
  then
    echo "back successfully!"  
  else
    echo "back failure!"  
  fi
}
if [ ! -d "${targetpath}/${nowtime}/" ]
then
 mkdir ${targetpath}/${nowtime}
fi
execute
echo "============== back end ${nowtime} =============="

以上脚本中,请注意路径和文件夹根据你自己的需求修改。

注意:

以上参数是我自己的实际使用情况,在使用前一定要认真阅读代码中的设置情况。
如果上面代码执行时报格式错误,请在Windwos下使用Notepad++转换为Unix格式即可,具体操作如下:
编辑-文档格式转换-转换为unix格式。

删除过期7天备份

$ vim /etc/init.d/mongo/mongo-delete

添加如下删除内容:

#!/bin/bash  
targetpath='/apps/data/mongobackup_db'
nowtime=$(date -d '-7 days' "+%Y%m%d")
if [ -d "${targetpath}/${nowtime}/" ]
then
  rm -rf "${targetpath}/${nowtime}/"
  echo "=======${targetpath}/${nowtime}/===删除成功=="
fi
echo "===$nowtime ==="

设置权限

如果不给执行权限则无法运行脚本:

$ cd /etc/init.d/mongo
$ chmod +x mongo-bak
$ chmod +x mongo-delete

添加定时任务

为达到每天备份的目的,请设置任务计划:

$ mkdir -p /var/log/mongobaklog
$ crontab –e

添加以下自动备份和删除备份脚本内容:

30 03 * * * /etc/init.d/mongo/mongo-bak 1 > /var/log/mongobaklog/mongo-bak.log &
30 01 * * * /etc/init.d/mongo/mongo-delete 1 > /var/log/mongobaklog/mongo-delete &

前面所示分别为每日凌晨3.301.30执行该脚本的时间。

其中 mongo-bakmongo-delete 分别是脚本的名称。后面的是备份日志情况,如果有异常可以通过日志查询。

MySQL 5.8(MariaDB)启动后立即停止解决方案

安装一切都很顺利,除了最后一步,启动mysql:

$ mysqld –skip-grant-tables –user=mysql

打印出以下错误信息,然后又停止了:

[ERROR] Can’t find messagefile ‘/usr/share/errmsg.sys’

在谷歌搜索之后,我找到了添加以下参数启动的方法:

–lc-messages-dir=”/usr/local/mysql/share/english/

为了启动它并让它实际工作,我使用了以下命令:

$ mysqld –skip-grant-tables –user=mysql –lc-messages-dir=”/usr/local/mysql/share/english/

最后成功启动。

CentOS 7系统开启BBR拥塞算法优化TCP加速服务器网络

介绍:

BBR是Google在2016年9月份开源的一个优化网络拥堵的算法。类似于锐速、Zetatcp、Finalspeed等,BBR也是通过单边优化TCP从而在同样的网络环境下更加高效的利用带宽和降低延迟。介于Google强大的开发背景和Linux4.9内核对BBR的引入,BBR是必会成为未来网络加速的首选方案。本人实测GigsGigs新加坡的服务器在开启BBR后,速度从3MB/s左右提高到了20MB/s左右,效果明显。下面就介绍如何在Centos7系统环境下开启BBR。

1.更新系统(主要将系统的软件包更新到最新):

$ yum update -y

2.安装最新的Linux内核(我是直接使用Elrepo编译好的内核进行安装):

$ rpm --import //www.elrepo.org/RPM-GPG-KEY-elrepo.org
$ rpm -Uvh //www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
$ yum --enablerepo=elrepo-kernel install kernel-ml

3.查看当前已安装的内核:

$ awk -F\' '$1=="menuentry " {print i++ " : " $2}' /etc/grub2.cfg

系统会返回类似结果:

0 : CentOS Linux (4.13.9-1.el7.elrepo.x86_64) 7 (Core)
1 : CentOS Linux (3.10.0-693.5.2.el7.x86_64) 7 (Core)
2 : CentOS Linux (3.10.0-514.el7.x86_64) 7 (Core)
3 : CentOS Linux (0-rescue-769ef9902d8743958a40cb81db696433) 7 (Core)

4.把 CentOS Linux (4.13.9-1.el7.elrepo.x86_64) 内核设置为默认并重启系统:

$ grub2-set-default 0
$ reboot

5.查看内核是否设置成功:

$ cat /proc/version
Linux version 4.13.9-1.el7.elrepo.x86_64 (mockbuild@Build64R7) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)) #1 SMP Sun Nov 12 10:02:34 EDT 2017

6.设置 sysctl.conf:

$ vim /etc/sysctl.conf

加入或修改如下两行参数:

net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

执行如下命令以使以上修改生效:

$ sysctl -p
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

7.查看BBR是否正常启动:

$ lsmod | grep bbr
tcp_bbr                20480  7

若显示tcp_bbr说明BBR已经正常启动。

Linux CentOS常用的11个Yum命令

Yum是在Linux CentOS 上使用的软件包管理系统。它负责/etc/yum.repos.d/定义的源镜像存储库管理软件包以其依赖关系。

在这篇文章中,我们将介绍一些常用和有用的yum命令:

1.安装yum包:

$ yum install PACKAGE_NAME

2.取出yum包装:

$ yum remove PACKAGE_NAME

3.重新安装一个yum包:

$ yum reinstall PACKAGE_NAME

4.搜索yum包:

$ yum search PACKAGE_NAME

5.显示yum包的信息:

$ yum info PACKAGE_NAME

6.更新安装的yum包:

$ yum update

7.更新具体的yum包:

$ yum update PACKAGE_NAME

8.显示yum历史:

$ yum history

9.显示已启用的yum存储库的列表:

$ yum repolist

10.找出哪个yum包提供了一个特定的文件(例如:/usr/bin/nc)):

$ yum whatprovides "*bin/nc"

11.清除yum缓存:

$ yum clean all

完结。

Centos 7 安装配置 MongoDB 数据库

什么是MongoDB?

MongoDB是一个基于分布式的文档数据库,由 C++ 语言编写,MongoDB是专为可扩展性,高性能和高可用性而设计的文件数据库。它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。

环境:

CentOS Linux release 7.4.1708 (Core) x86_64
IP addr:10.28.204.66

1.安装MongoDB

说明:官方不建议使用二进制压缩包安装,除非您有一个特定的需求。那咱就使用yum安装即可,功能都一样。

创建一个mongodb镜像源文件,这样就可以直接安装最新版MongoDB。

$ vim /etc/yum.repos.d/mongodb-org-3.4.repo

添加以下内容:

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=//repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=//www.mongodb.org/static/pgp/server-3.4.asc

执行以下命令开始安装:

$ yum install -y mongodb-org

安装完成后的目录如下:

/etc/mongod.conf – 配置文件
/var/lib/mongo – 数据目录
/var/log/mongodb/mongod.log – 日志文件

2.配置 mongod.conf

在生产环境中,我们不可能将重要数据放在系统盘,例如:/var/lib/mongo 否则一旦系统故障,你的数据可能将不复存在。因此我的数据盘是挂在apps目录,所以创建mongo数据存储目录。

创建数据库存放目录并赋予权限:

$ mkdir -p /apps/mongodb/data/db
$ chown -R mongod.mongod /apps/mongodb/data/db

设置SeLinux 安全上下文

$ sudo chcon -Rv --type=mongod_var_lib_t /apps/mongodb

如果未设置,无法启动且日志中会报如下错误:

exception in initAndListen: 20 Attempted to create a lock file on a read-only directory: /apps/mongodb/data/db, terminating

配置完成后的内容如下:

$ egrep -v "^$|^#|^;" /etc/mongod.conf

systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log
storage:
  dbPath: /apps/mongodb/data/db
  journal:
    enabled: true
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
net:
  port: 27017
  bindIp: 127.0.0.1,10.28.204.66  # Listen to local interface only, comment to listen on all interfaces.
security:
  authorization: enabled

注意:配置文件需要缩进2个空格,这是yaml语法所要求的,否则无法启动。

更多配置请参阅MongoDB文件选项

3.设置 SELinux

semanage命令是用来查询与修改SELinux默认目录的安全上下文。CentOS系统自带的chcon工具只能修改文件、目录等文件类型和策略,无法对端口、消息接口和网络接口等进行管理,semanage能有效胜任SELinux的相关配置工作。

安装semanage

$ yum provides semanage
$ yum -y install policycoreutils-python
$ semanage port -a -t mongod_port_t -p tcp 27017

你也可以直接关闭SELINUX:

$ vim /etc/selinux/config

默认值:

SELINUX=disabled

修改为:

SELINUX=enforcing

或者允许:

SELINUX=permissive

修改完成后记得重启服务器。此外我个人不建议关闭SELINUX,因为它关乎到Linux系统的本身安全。

4.设置 UNIX ulimit

您可以在系统提示符下使用该命令检查系统限制,如以下示例所示:

$ ulimit -a

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7243
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7243
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

官方推荐设置:

-f (file size): unlimited
-t (cpu time): unlimited
-v (virtual memory): unlimited [1]
-n (open files): 64000
-m (memory size): unlimited [1] [2]
-u (processes/threads): 64000

设置资源限制:

$ vim /etc/security/limits.conf

在文件末端添加以下内容:

mongod soft fsize unlimited
mongod hard fsize unlimited
mongod soft cpu unlimited
mongod hard cpu unlimited
mongod soft as unlimited
mongod hard as unlimited
mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 64000
mongod hard nproc 64000

以上参数说明:

mongod – 资源限制指定的用户名(你也可以用*代替全局)。
soft – 当前系统生效的设置值。
hard – 系统中所能设定的最大值。

注:这里需要说明 soft 的限制值不能比 hard 大。用 – 就表明同时设置了 soft 和 hard 的值。

5.启动mongod数据库

后期管理可以使用以下命令:

$ systemctl start mongod.service
$ systemctl restart mongod.service
$ systemctl stop mongod.service

6.查看mongod用户资源限制情况

查看mongod进程PID号:

$ ps -ef | grep mongod

mongod    1540     1  0 Oct18 ?        00:06:15 /usr/bin/mongod -f /etc/mongod.conf
root      6631  2256  0 08:39 pts/0    00:00:00 grep --color=auto mongod
$ cat /proc/1540/limits

Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            8388608              unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             64000                64000                processes
Max open files            64000                64000                files
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       7243                 7243                 signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

其中1540是Mongod的PID号。

如果不生效, 重启服务器即可。

7.设置 zone_reclaim_mode

$ echo 0 > /proc/sys/vm/zone_reclaim_mode
$ echo 2 > /proc/sys/vm/overcommit_memory

如果不设置其参数,长时间运行mongodb会出现以下报错信息:

[initandlisten] connection refused because too many open connections: 819 of 819

8.关闭Transparent Huge Pages (THP)大页面

请参阅《禁用 Transparent Huge Pages (THP) 透明巨大页面

注意:如果不设置启动的时候会有警告,但不影响使用。生产环境建议设置。


9.通过以下命令查看mongod启动信息及重要消息

$ cat /var/log/mongodb/mongod.log
...
** WARNING: Access control is not enabled for the database.
**          Read and write access to data and configuration is unrestricted.
...

上述日志中显示两条警告:

数据库未启用访问控制。
对数据的读写访问和配置是不受限制的。

这样是极其不安全的,下面来创建安全数据库:

10.连接到实例

$ mongo --port 27017
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017/
MongoDB server version: 3.4.9
Server has startup warnings:
2017-10-19T13:15:54.817+0800 I CONTROL  [initandlisten]
2017-10-19T13:15:54.818+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
2017-10-19T13:15:54.818+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
2017-10-19T13:15:54.818+0800 I CONTROL  [initandlisten]
>

11.创建用户管理员(在admin数据库中认证)

> use admin
db.createUser(
  {
    user: "myrenwole",
    pwd: "myrenwole",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)
Successfully added user: {
        "user" : "myrenwole",
        "roles" : [
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ]
}
>

12.连接并认证

$ mongo --port 27017 -u "myrenwole" -p "myrenwole" --authenticationDatabase "admin"

13.添加额外权限用户

use test
db.createUser(
  {
    user: "renwolecom",
    pwd: "renwolecom",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)
Successfully added user: {
        "user" : "renwolecom",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "test"
                },
                {
                        "role" : "read",
                        "db" : "reporting"
                }
        ]
}
>

添加完成,查看是否存在警告:

$ mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
>

已经没有警告信息了。

调用连接MongoDB数据库必须要添加必要参数,例如:

var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'test', 27017, {user: 'renwolecom', pass: 'renwolecom'});

说明:当mongo命令连接失败时,请尝试删除mongod.lock文件,该文件位于你的数据库目录下,之后重启mongodb数据库,如果问题依旧,请查看日志具体报错。

14.配置Firewall防火墙

$ firewall-cmd --zone=public --add-port=27017/tcp --permanent
$ firewall-cmd --reload

15.卸载/删除MongoDB

$ systemctl stop mongod
$ yum erase $(rpm -qa | grep mongodb-org)
$ rm -rf /var/log/mongodb
$ rm -rf /var/lib/mongo

注意:此过程将完全删除MongoDB数据库,因此请确保在继续之前备份所有配置和数据。

结语:

关于MongoDB的安装配置已经完成,说难不难,说不难也有些坑,不过主要还是配置比较麻烦。其实MongoDB的基础配置已经可以满足生产需求,除非有特殊要求,需要手动添加配置项。后期我也会写一些关于MongoDB的使用方法。

参考教程:

//docs.mongodb.com/manual/administration/install-on-linux/

Logstash Filebeat 安装配置之使用 Kibana 分析日志数据

什么是 Logstash?

Logstash 是用于管理事件和日志的开源工具。它为数据收集提供实时传递途径。Logstash 将收集你的日志数据,将数据转换为 JSON 文档,并将其存储在 Elasticsearch 中。

本教程的目地是使用Logstash来收集服务器的syslog,并设置Kibana可视化收集的日志。

此次我们需要用到的组件:

Logstash:处理传入日志的的服务器组件
Elasticsearch:存储所有日志。
Kibana:用于搜索和可视化日志的Web界面。
Filebeat:安装在客户端服务器上,利用Filebeat向Logstash搬运日志数据,典型的搬运工。

以上组件都需要用到,确保Elasticsearch、Kibana已经安装好,如未安装,请参阅以下教程:

安装配置 Elasticsearch 搜索引擎集群
ElasticSearch 之 Kibana 二进制安装配置
Elasticsearch Kibana 集群 安装配置 X-pack 扩展包

环境:

Server: CentOS 7 (IP: 10.28.204.65). 16 GB RAM.
&
Logstash/Kibana/Elasticsearch

Client: CentOS 7 (IP: 10.28.204.66). 8 GB RAM.
&
Filebeat

先决条件:

Linux JAVA JDK JRE 环境变量安装与配置

由于Logstash基于Java,请确保您的计算机上安装有OpenJDK或Oracle JDK(暂不支持Java 9)。

安装说明:

ELK 官网对于每种软件提供了多种格式的安装包(zip/tar/rpm/DEB),以 Linux Centos 7 系统为例,如果直接下载 RPM,可以通过 rpm -ivh path_of_your_rpm_file 直接安装成系统 service。以后就可以使用 systemctl 命令启停。比如 systemctl logstash.service start/stop/status。很简单,但缺点也很明显,不能自定义安装目录,相关文件放置比较分散,不易于集中管理。

安装 Logstash

下载地址://www.elastic.co/downloads/logstash

说明:我下面讲述两种安装方式。全程使用超级root用户操作。

二进制压缩包安装方式

1.解压并将其移动到合适的路径:

$ cd /tmp
$ tar zxvf logstash-5.6.3.tar.gz
$ mv logstash-5.6.3 /usr/local
$ cd /usr/local
$ ln -s logstash-5.6.3 logstash
$ mkdir -p /usr/local/logstash/config/conf.d

2.创建用户和组并赋予权限

$ groupadd logstash
$ useradd -g logstash logstash
$ chown -R logstash.logstash logstash*

3.创建systemctl系统单元文件

$ vim /etc/systemd/system/logstash.service

[Unit]
Description=logstash

[Service]
Type=simple
User=logstash
Group=logstash
# Load env vars from /etc/default/ and /etc/sysconfig/ if they exist.
# Prefixing the path with '-' makes it try to load, but if the file doesn't
# exist, it continues onward.
EnvironmentFile=-/usr/local/logstash/config
EnvironmentFile=-/usr/local/logstash/config
ExecStart=/usr/local/logstash/bin/logstash "--path.settings" "/usr/local/logstash/config"
Restart=always
WorkingDirectory=/
Nice=19
LimitNOFILE=16384

[Install]
WantedBy=multi-user.target

安装完成。此种安装方法优势在于配置文件集中,易管理,但安装比较麻烦。

YUM 安装方式

此种安装方式简单快速,耗时较短。

1.下载并安装公共签名密钥:

$ rpm --import //artifacts.elastic.co/GPG-KEY-elasticsearch

如果下载失败,请将服务器DNS修改为 8.8.8.8 重启网卡即可。

2.添加logstash镜像源

$ vim /etc/yum.repos.d/logstash.repo

[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=//artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=//artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

3.开始安装

$ yum install logstash -y

安装完后会自动生成logstash.service单元文件,无需手动创建。

说明5.x 代表:默认安装最新版的logstash,可根据需求把 x 更改为具体版本号,例如:5.6

YUM安装后的相关配置目录:

/usr/share/logstash - 主程序
/etc/logstash - 配置文件
/var/log/logstash - 日志
/var/lib/logstash - 数据存储

开始配置 Logstash

注意:以下操作,我使用第一种安装方式配置。

Filebeat(Logstash Forwarder)通常安装在客户端服务器上,并使用SSL证书验证Logstash服务器的身份以进行安全通信。

1.生成有效期为365天的自签名SSL证书,使用主机名或IP SAN创建SSL证书。

方法一(主机名):

$ cd /etc/pki/tls/

现在创建SSL证书。将“server.renwolecom.local” 替换为你的logstash服务器主机名。

$ openssl req -x509 -nodes -newkey rsa:2048 -days 365 -keyout private / logstash-forwarder.key -out certs / logstash-forwarder.crt -subj / CN = server.renwolecom.local

2.如果你计划使用IP地址而不是主机名,请按照以下步骤为IP SAN创建SSL证书。

方法二(IP地址):

要创建IP SAN证书,你需要在OpenSSL配置文件中的SubjectAltName中添加一个logstash服务器的IP地址。

$ vim /etc/pki/tls/openssl.cnf

查找 “[v3_ca]” 部分,在此字段下方添加logstash服务器的IP,例如:

subjectAltName = IP:10.28.204.65

$ cd /etc/pki/tls/
$ openssl req -x509 -days 365 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

本文采用后者。

配置 logstash.conf

Logstash配置可以在/etc/logstash(YUN安装方式)中找到。由于我是二进制安装,所以需要在 /usr/local/logstash/config 目录下创建conf.d文件夹(已创建)。

logstash配置文件由三部分组成,分别是:输入、过滤、输出; 你可以在 /usr/local/logstash/config/conf.d 下分别创建三个配置文件,也可以将这三个部分放在一个配置文件中。

1.我建议你使用单个文件并放置输入、过滤、输出部分。

$ vim /usr/local/logstash/config/conf.d/logstash.conf

2.在输入部分,我将配置Logstash通信端口以及添加SSL证书,从而进行安全通信。

input {
 beats {
   port => 5044
   ssl => true
   ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
   ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

3.在过滤器部分,我们将使用Grok来解析这些日志,然后将其发送到Elasticsearch。以下grok过滤器将查找“syslog”标记的日志,并尝试解析它们,以生成结构化索引。

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" ]
    }
  }
}

4.在输出部分,我们将定义要存储的日志位置; 这个很显然是Elasticsearch服务器。

output {
 elasticsearch {
  hosts => [ "10.28.204.65:9200" ]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}

5.完整配置内容如下:

$ cat /usr/local/logstash/config/conf.d/logstash.conf

input {
 beats {
   port => 5044
   ssl => true
   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" ]
    }
  }
}
output {
 elasticsearch {
  hosts => [ "10.28.204.65:9200" ]
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
 user => elastic
 password => changeme
       }
stdout {
    codec => rubydebug
       }
}

修改 logstash.yml 主配置文件

修改完成后的内容如下:

$ egrep -v "(^#|^$)" /usr/local/logstash/config/logstash.yml

path.config: /usr/local/logstash/config/conf.d
path.logs: /usr/local/logstash/logs

主要是上面路径。

启动 logstash 并加入开机自启

$ systemctl start logstash
$ systemctl enable logstash

启动后你可以通过如下命令查看日志状态,从而解决任何可能出现的问题。

YUM安装查看日志:

$ cat /var/log/logstash/logstash-plain.log

二进制安装查看日志:

$ cat /usr/local/logstash/logs/logstash-plain.log

请根据自己的实际路径查看操作。

在客户端服务器上安装 Filebeat

1.有5个Beats客户端可用,分别是:

Filebeat – 实时洞察日志数据。
Packetbeat – 分析网络数据包数据。
Metricbeat – 采集服务的各项性能指标。
Winlogbeat – 轻量级的Windows事件日志。
Heartbeat – 主动探测来监控其可用性的服务。

2.要分析客户端计算机的系统日志(例如:10.28.204.66),我们需要安装filebeat。使用以下命令进行安装:

$ curl -L -O //artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-x86_64.rpm
$ rpm -vi filebeat-5.6.3-x86_64.rpm

配置 Filebeat

现在是时候将filebeat与Logstash连接起来,按照下面的步骤来获得配置ELK Stack的filebeat。

1.Filebeat(beats)使用SSL证书验证logstash服务器身份,因此将logstash-forwarder.crt从logstash服务器复制到客户端。

$ scp -pr root@10.28.204.65:/etc/pki/tls/certs/logstash-forwarder.crt /etc/ssl/certs/

2.打开filebeat配置文件

$ vim /etc/filebeat/filebeat.yml

3.我们将配置filebeat来发送 /var/log/messages 日志内容到Logstash服务器。因此请在路径部分下修改现有的配置。请注释掉– /var/log/*.log,以避免将该目录中所有.log文件发送到Logstash。

...
paths:

- /var/log/messages
# - /var/log/*.log
...

4.注释掉“output.elasticsearch”部分。因为我们不会直接将日志存储到Elasticsearch

...
#output.elasticsearch:
...

5.现在,找到 “output.logstash” 行。并修改如下所示的内容:

本节定义filebeat将日志发送到logstash服务器“10.28.204.65:5044”。并修改SSL证书所在的路径。

...
output.logstash:
  # The Logstash hosts
  #hosts: ["localhost:5044"]
  hosts: ["103.28.204.65:5044"]

  # Optional SSL. By default is off.
  # List of root certificates for HTTPS server verifications
  ssl.certificate_authorities: ["/etc/ssl/certs/logstash-forwarder.crt"]
...

保存并退出。
重要:Filebeat的配置文件采用YAML格式,这意味着缩进非常重要!请务必使用与这些说明相同数量的空格。

重新启动 Filebeat 服务

$ systemctl restart filebeat
$ cat /var/log/filebeat/filebeat

Firewall 防火墙设置

$ firewall-cmd --permanent --zone=public --add-port=5044/tcp
$ firewall-cmd --reload

测试数据是否正常存储

在你的 Elasticsearch 服务器上,通过使用以下命令,验证 Elasticsearch 是否接收到 Filebeat>logstash 数据:

$ curl -u elastic -XGET '//10.28.204.65:9200/filebeat-*/_search?pretty'

回车后输入你的认证密码,你应该看到一堆如下的输出:

...
{
"_index" : "filebeat-2017.11.1",
"_type" : "log",
"_id" : "AV8Zh29HaTuC0RmgtzyM",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2017-11-1T06:16:34.719Z",
"offset" : 39467692,
"@version" : "1",
"beat" : {
"name" : "204",
"hostname" : "204",
"version" : "5.6.3"
},
"input_type" : "log",
"host" : "204",
"source" : "/var/log/messages",
"message" : "Nov 11 19:06:37 204 logstash: at org.jruby.internal.runtime.methods.InterpretedMethod.call(InterpretedMethod.java:182)",
"type" : "log",
"tags" : [
"beats_input_codec_plain_applied"
]
}
...

如果你的输出显示为 0,那么你应该排查logstash与Elasticsearch的通信是否正常,通过可以通过查看启动日志得出结论。如果你获得了预期的输出,则进行下一步。

连接到 Kibana

1.使用以下URL访问Kibana:

//10.28.204.65:5601/

2.在你的第一次登录时,你必须映射filebeat索引。

在索引名称或模式框中键入以下内容:

filebeat-*

选择 @timestamp 然后单击创建。

3.还可以登录 logstash
依次打开:

Management >> Index Patterns >> Create Index Pattern

输入:

filebeat-*

选择:

@timestamp

其他默认,点击:Create

4.创建完成后点击:

Discover >> filebeat-*

此时你可以在右侧查看客户端 10.28.204.66 的系统日志。

ELK Stack Logstash 的安装配置与结合使用到目前为止已经完成,Kibana不仅仅局限于此,他还有更强大的功能,值得深入研究。