图片 3

2过程笔记,日志查询系统搭建

我们用ELK做日志分析系统,Elasticsearch1.7.3运行了近一年,最近已经将一个集群升级到ES5.1.1,但是遇到问题比较多。所以将另一个集群升级到社区推荐比较稳定的2.4.2。为了便于升级管理,操作都是用ansible来统一执行。

日志分析ELK平台,由ElasticSearch、Logstash和Kiabana三个开源工具组成。

搭建该日志查询系统的目的就是为了运维、研发很方便的进行日志的查询。Kibana一个免费的web壳;Logstash集成各种收集日志插件,还是一个比较优秀的正则切割日志工具;Elasticsearch一个开源的搜索引擎框架(支持群集架构方式)。

一:停止monit守护进程

官方网站:

1 安装需求

#集群的所有logstash、es进程都是由monit监控守护,先停止监控守护。感兴趣monit的可以看我另一篇文章《使用M/Monit进行可视化集中进程管理》

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

1.1 理论拓扑

图片 1

$ ansible elksjs -m shell -a ‘/opt/monit/bin/monit -c
/opt/monit/conf/monitrc unmonitor all’

Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

1.2 安装环境

二:停止es集群写入

Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和
ElasticSearch 提供的日志分析友好的 Web
界面,可以帮助您汇总、分析和搜索重要数据日志。

1.2.1 硬件环境

服务器配置:

(HP DL 385 G7 、RAM:12G、CPU:AMD 6128、DISK:SAS 146*4)

(Xen虚拟机、RAM:8G、CPU:×4、DISK:100G)

服务器ip:

192.168.50.62(logstash 角色agent)

192.168.50.98(redis消息队列服务、logstash 角色indexing、Elasticsearch)

192.168.10.42(kibana)

#由于前端顶了kafka集群,所以后端停止写入,数据会堆积在kafka中。集群启动后继续消费。数据不会丢失。

ELK原理图:
图片 2

1.2.2 操作系统

CentOS 5.6 X64

$ ansible elksjs -m shell -a ‘/etc/init.d/logstash start’

如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。

1.2.3 Web-server基础环境

Nginx+php(安装过程略过)

三:停止logstash写入后,同步副本commitd

ELK平台搭建
系统环境
System: CentOS release
6.7(Final)
ElasticSearch: elasticsearch-5.3.1.tar.gz
Logstash: logstash-5.3.1.tar.gz
Kibana: kibana-5.3.1-linux-x86_64.tar.gz
Java: openjdk version  ”1.8.0_131″

1.2.4 软件列表

JDK 1.6.0_25

logstash-1.1.0-monolithic.jar

elasticsearch-0.18.7.zip

redis-2.4.12.tar.gz

kibana

#和linux命令sync的类似,停机前将内存中数据刷到磁盘中。

ELK官网下载:

1.3 获取方法

$ curl -XPOST localhost:9200/_flush/synced

图片 3

1.3.1 Jdk获取路径

四:停机前禁止分片分配

JAVA环境配置

1.3.2 Logstash获取路径

#禁止分片分配,防止集群启动后,某些节点没有及时加入而导致数据在集群中分配均衡,增加负载。应该等所有节点加入后,再开启分片分配。

下载最新版本1.8.0_131

1.3.3 Elasticsearch获取路径

elasticsearch-0.18.7.zip

$ curl -XPUT  localhost:9200/_cluster/settings -d
‘{“transient”:{“cluster.routing.allocation.enable”: “none”}}’

cd /tmp/

1.3.4 Kibana获取路径

五:停止es

wget

2 安装步骤

#停止所有es的节点。

tar zxf jdk-8u131-linux-x64.tar.gz -C /usr/local/
vim /etc/profile
添加如下内容
JAVA_HOME=/usr/local/jdk1.8.0_131

2.1 JDK的下载及安装

基础安装

wget

sh jdk-6u25-linux-x64.bin

mkdir -p /usr/java

mv ./jdk1.6.0_25 /usr/java

ln –s /usr/java/jdk1.6.0_25 /usr/java/default

编辑 /etc/profile文件,加入以下行内容

export JAVA_HOME=/usr/java/default

export PATH=$JAVA_HOME/bin:$PATH

export
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH

刷新环境变量

source /etc/profile

$ ansible elksjs -m shell -a ‘/etc/init.d/elasticsearch stop’

PATH=$JAVA_HOME/bin:$PATH

2.2 Redis下载及安装

wget

make –j24

make install

mkdir -p /data/redis

cd /data/redis/

mkdir {db,log,etc}

六:卸载es老版本

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

2.3 Elasticsearch下载及安装

cd /data/

mkdir –p elasticsearch && cd elasticsearch

wget –no-check-certificate

elasticsearch-0.18.7.zip

unzip elasticsearch-0.18.7.zip

#卸载所有es的安装包

export JAVA_HOME PATH CLASSPATH

2.4 Logstash下载及安装

mkdir –p /data/logstash/ && cd /data/logstash

wget

$ ansible elksjs -m shell -a ‘rpm -e elasticsearch-1.7.3-1’

source /etc/profile

2.5 Kibana下载及安装

wget
–no-check-certificate

tar zxvf master

七:安装新包

ElasticSearch配置
wget

  useradd elktest           

3 相关配置及启动

首先需要提前启动消息队列(redis),Elasticsearch服务,假如不提前启动,而去启动logstash会有报错,原因logstash不能连接对应的服务。

#安装新的es2.4.2安装包

tar -zxvf elasticsearch-5.3.1.tar.gz
cd elasticsearch-5.3.1
vi config/elasticsearch.yml

3.1 Redis配置及启动

ansible elksjs -m shell -a ‘wget

-P /opt’

修改以下配置项:
(路径需要先自行创建,并且elktest用户可读写)
cluster.name: elk_cluster
node.name: node0
path.data: /tmp/elasticsearch/data
path.logs: /tmp/elasticsearch/logs
network.host: 192.168.1.5
http.port: 9200

3.1.1 配置文件

vim /data/redis/etc/redis.conf

#—————————————————-

#this is the config file for redis

pidfile /var/run/redis.pid

port 6379

timeout 0

loglevel verbose

logfile /data/redis/log/redis.log

databases 16

save 900 1

save 300 10

save 60 10000

rdbcompression yes

dbfilename dump.rdb

dir /data/redis/db/

slave-serve-stale-data yes

appendonly no

appendfsync everysec

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100

auto-aof-rewrite-min-size 64mb

slowlog-log-slower-than 10000

slowlog-max-len 128

vm-enabled no

vm-swap-file /tmp/redis.swap

vm-max-memory 0

vm-page-size 32

vm-pages 134217728

vm-max-threads 4

hash-max-zipmap-entries 512

hash-max-zipmap-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

ansible elksjs -m shell -a ‘rpm -iv /opt/elasticsearch-2.4.2.rpm’

其他的选项保持默认,然后启动ES:
  su elktest            #ES不允许root启动服务 必须是普通用户
./bin/elasticsearch &

3.1.2 Redis启动(192.168.50.98)

[logstash@Logstash_2 redis]# redis-server /data/redis/etc/redis.conf
&

八:恢复配置文件和启动文件

配置Logstash
wget

tar -zxvf logstash-5.3.1.tar.gz
cd logstash-5.3.1

3.2 Elasticsearch 配置及启动(192.168.50.98)

#做这一步的前提是本次升级配置文件没有变化,1.7.3和2.4.2的配置变化不大,我的配置中都适配2.4.2版本,所以直接用原配置了。稍后再做优化和调整。如果有变化,请更新配置文件。

vi config/test_es.conf

3.2.1 Elasticsearch启动

[logstash@Logstash_2 redis]#
/data/elasticsearch/elasticsearch-0.18.7/bin/elasticsearch –p
../esearch.pid &

$ ansible elksjs -m shell -a ‘cd /etc/init.d/ &&rm elasticsearch && mv
elasticsearch.rpmsave elasticsearch’

input {
        file {
        path => “/tmp/test.log”          #测试文件
    }
}
filter {

 

$ ansible elksjs -m shell -a ‘cd  /etc/elasticsearch/&& rm -rf
elasticearch.yml &&mv elasticsearch.yml.rpmsave elasticsearch.yml’

}
output {
        stdout { codec => rubydebug }
        elasticsearch {
                index => “test_%{+YYYY.MM.dd}”        #索引信息
                hosts => [ “192.168.1.5:9200” ]
        }
}

3.3 Logstash配置及启动

九:修改数据目录属主

    ./bin/logstash -f config/test_es.conf  &            #启动服务

3.3.1 Logstash配置文件(agent收集日志角色)

配置文件

input {

file{

type => “linux-syslog”

path => [ “/var/log/*.log”,
“/var/log/messages”, “/var/log/syslog” ]

}

file {

type => “nginx-access”

path =>
“/usr/local/nginx/logs/access.log”

}

file {

type => “nginx-error”

path =>
“/usr/local/nginx/logs/error.log”

}

}

output {

redis {

host => “192.168.50.98”

data_type =>”list”

key => “logstash:redis”

}

}

 

Agent 启动方法

java -jar logstash-1.1.0-monolithic.jar agent -f shipper.conf &

 

#由于卸载es安装包的时候也删除了es用户,又新建了es用户,所以要重新给es的data目录属主改成elasticsearch。

配置Kibana:
wget

tar -zxvf kibana-5.3.1-linux-x86.tar.gz
cd kibana-5.3.1-linux-x86
vi config/kibana.yml

3.3.2 Logstash启动为Index(从redis读取日志,负责日志的切割,存储至Elasticsearch)

input {

redis {

host => “192.168.50.98”

data_type =>”list”

key => “logstash:redis”

type => “redis-input”

}

}

filter {

grok {

type => “linux-syslog”

pattern => “%{SYSLOGLINE}”

}

grok {

type => “nginx-access”

pattern => “%{NGINXACCESSLOG}”

}

}

output {

elasticsearch {

host =>”192.168.50.62″

}

}

启动方法

java -jar logstash.jar agent -f my.conf &

$ ansible elksjs -m shell -a ‘chown -R elasticsearch.elasticsearch
/data/elk/es’

server.port: 5601
server.host: “192.168.1.5”
elasticsearch.url:
kibana.index: “.kibana.yml”

3.3.4 kibana配置

首先在nginx添加站点配置

server {

listen 80;

server_name logstash.test.com;

index index.php;

root /usr/local/nginx/html;

#charset koi8-r;

#access_log logs/host.access.log main;

location ~ .*\.(php|php5)$

{

#fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_pass 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf;

}

}

$ ansible elksjs -m shell -a ‘chown -R elasticsearch.elasticsearch
/data/es’

./bin/kibana

4 性能调优

发表评论

电子邮件地址不会被公开。 必填项已用*标注