起始

软件、资料、代码、照片等越来越多,好几台电脑需要共享。
公有网盘哪怕说稳定提供服务,实际上也保不齐那一天突然就要下线了。
所以干脆上个NAS吧。
选硬件,作为家用的NAS,群晖家庭版配置又看不上,企业版又贵了一些。
路由器跑NAS,性能也太差了,定位到X86平台。看了一些DIY方案,并不是很完美,最后
看上了万由的的整体解决方案,算了下价格,自己DIY的也便宜不到哪里去,机箱还是大问题。

硬件方案

万由HomeNASV3
主板:华擎J3710-ITX
机箱:410
内存:4G * 2
系统盘:128G SSD
数据盘: WD 4TB NAS红盘 * 2 + 已有2TB * 1

软件方案

母系统: Windows Server 2016
虚拟机:Hyper-V(群晖在虚拟机中)

上图

万由Home NAS V3

万由Home NAS V3

万由Home NAS V3

万由Home NAS V3

Windows Server 2016

Windows Server 2016

image-002

image-003

问答

母系统用 Windows Server 2016?
和win10一样的内核,功能更全
母系统如果用群晖会有数据安全顾虑
Windows系统自由度非常高

2个盘是否有阵列什么的?
见过有些人直接把物理盘挂在Hyper-V中,暴露给群晖做软Raid1
我不做整列,软整列我是不敢用的,还不如直接跑裸盘
在Win母系统下,硬盘NTFS分区,用NFS服务暴露给群晖用

为什么大家都虚拟化群晖用?
因为群晖有丰富和便捷的功能,可以方便的实现诸多功能,如下载,音乐,影视等
周边配套也非常全,如有手机客户端等

2个盘是如何做数据保护?
盘A,盘B
用软件定时同步 盘A 到 盘B,如按天同步
不开实时同步,可延长盘B的寿命
软件使用
方案1 FastCopy-M command模式 + 系统计划任务
方案2 傲梅轻松备份,既可以备份系统,也可以同步备份文件

设置WOL网络唤醒

需要设置2个地方
①BIOS设置
PCIE Device Power On (PCIE设备开机) 打开
②Windows Server 2016系统中设置
控制面板\所有控制面板项\网络连接
以太网>右键>属性>配置>高级
关机 唤醒 > 选 开启
魔术封包唤醒 > 选 开启
此时可LAN内网唤醒

支持WAN公网唤醒
* 启用DDNS(必须,域名解析动态IP)
* DHCP分配NAS机固定IP或NAS机设置固定IP(必须,固定NAS机内网IP)
* ARP静态绑定IP和MAC(必须,路由器自带功能IP和MAC绑定,启用静态 ARP 绑定,或在路由器自定义开机后运行绑定脚本一般是 arp -s ip mac)
* 端口映射:(任意源IP:协议UDP:端口9)=>(目标NAS的IP:协议UDP:端口9) (必须,UDP端口号可以任意,使用能记住的就ok)
* WOL客户端软件(可选,使用WOL客户端,用DDNS域名+端口9+NAS机MAC唤醒)

Tips:
可以使用wireshark抓wol包,进行检查测试。
WOL客户端使用手机APP更方便,ANDROID APP推荐Fing、PingTools。

参考教程

万由NAS,傻瓜式安装win10+hyper-v虚拟机+洗白黑群晖流程
DSM 5.2升级6.02-8451成功,附升级教程 目前黑6.x系列用的人还不错,建议成熟后再弄
华擎J3710-ITX主板官网
华擎J3710-ITX UEFI BIOS 设置

Elastic Stack5.0 5.x elk5.x部署疑问解答

如何给Kibana增加帐号认证?

Kibana5.0以下一般使用nignx反向代理,在nginx配置中增加HTTP Auth Basic
Kibana5.0起,官方提供X-Pack插件方案提供安全认证功能
在Kibana和Elasticsearch中安装X-Pack插件
官方文档
X-Pack for the Elastic Stack » Installing X-Pack
https://www.elastic.co/guide/en/x-pack/current/installing-xpack.html
默认的帐号密码
帐号:elastic
密码:changeme
可在Kibana中 Management > Users 可视化管理
修改密码后,在/etc/kibana/kibana.yml配置文件中也要同步修改
elasticsearch.username: “elastic”
elasticsearch.password: “changeme”

在Kibana5.0 和Elasticsearch5.0上安装了X-Pack插件后启用了安全帐号密码,那么logstash output如何配置?

这个太坑了,文档不太好找,官方文档藏的太深
官方文档
X-Pack for the Elastic Stack » Securing Elasticsearch and Kibana » Tribe, Clients and Integrations » Logstash and Security
https://www.elastic.co/guide/en/x-pack/current/logstash.html
帐号密码存在es中,可以直接在kibana的Management中配置
然后在/etc/logstash/conf.d/logstash.conf 配置文件中

output {
    elasticsearch {
        hosts => ["你的esip"]
        index => "logstash-%{+YYYY.MM.dd}"
        document_type => "你的type"
        template_overwrite => true
        user => 你的帐号
        password => 你的密码
    }
}

最后重启logstash
提示:如果重启了没生效,用kill把logstash强制关闭,再开启。 调试logstash配置的,可以用tail -f /var/log/logstash/xxxx日志,观察日志文件是你解决问题的开始

Rancher Labs公司产品  http://rancher.com/

Rancher Labs 公司目前有2个产品。

  • Rancher Docker容器管理平台
  • RancherOS 一种适合Docker运行的Linux发行版,类似于CoreOS

Rancher Docker容器管理平台

如果说原生的Docker是一个一个集装箱,Rancher可以比喻成集装箱船,平台化管控,带着应用航行。

rancher 承载 docker

rancher 承载 docker

 

Docker环境安装

以下是在CentOS7的环境下安装Rancher

Docker官方安装方式

curl -sSL https://get.docker.com/ | sh

在国内环境下利用DaoCloud加速安装Docker环境

curl -sSL https://get.daocloud.io/docker | sh
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://你的daocloudID.m.daocloud.io #设置国内镜像加速下载
systemctl start docker.service #CentOS7 启动docker
systemctl enable docker.service #CentOS7 开机自启动docker
docker version #查看docker版本
docker info #查看docker信息
sudo service docker status #查看docker状态

安装Rancher Management Server 管理端

docker run -d --restart=always -p 8080:8080 rancher/server

安装Rancher Agent 被控端

主控端IP:8080 http://192.168.33.11:8080/ > Add Host
复制第五步的内容到被控机安装

sudo docker run -e CATTLE_HOST_LABELS='center=localdev&host=dev'  -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://192.168.33.11:8080/v1/scripts/31B86F01A71423902C9F:1474722000000:zRPBZeQo9rLTzrnTvhdfKRyBh3o

说明

安装好“Rancher Agent 被控端”后,就可以在 “Rancher Management Server 管理端” 管理、部署docker了
rancher没多少中文资料,直接看官方文档

扩展

Rancher支持&文档
Rancher 实战红宝书
DockerInfo Rancher
Docker编排工具调研:Rancher
都说要做细分,Rancher Labs想通过大而全的功能,帮助Docker完成在大型企业的落地
容器服务如何在企业客户落地?Rancher解决之道分享

 

微型电脑intel Skull Canyon NUC6i7kyk 骷髅峡谷配置单/性能测试

总体感觉:性价比并不高,买它不是图性价比,而是喜欢这小东西

集成显卡:玩守望屁股(守望先锋)也是可以的

CPU温度:总体讲温度有点高,空载的时候温度有40-50°,满负荷的时候温度能达到100°,注意做好降温处理

 

我的配置单详情

主机:intel Skull Canyon NUC6i7kyk

内存:Kingston HyperX Impact DDR4 2400MHz 16G   *  2

硬盘:Samsung SSD SM951-NVMe 512GB

显示器:戴尔(DELL) U2417HA 23.8英寸带臂架四面超窄边IPS屏显示器

键盘:  海盗船K70 惩戒者 红光

鼠标:罗技G302

 

某宝购买记录

微型电脑intel Skull Canyon NUC6i7kyk 骷髅峡

微型电脑intel Skull Canyon NUC6i7kyk 骷髅峡

某国产大师跑分

微型电脑intel Skull Canyon NUC6i7kyk 骷髅峡 鲁大师跑分综合

微型电脑intel Skull Canyon NUC6i7kyk 骷髅峡 鲁大师跑分综合

完整的评测包含非常详细的跑分,评测

微型电脑最强音,Intel NUC Skull Canyon NUC6i7KYK 开箱拆解评测

 

介绍

ELK是业界标准的日志采集,存储索引,展示分析系统解决方案
logstash提供了灵活多样的插件支持不同的input/output
主流使用redis/kafka作为日志/消息的中间环节
如果已有kafka的环境了,使用kafka比使用redis更佳
以下是一个最简化的配置做个笔记,elastic官网提供了非常丰富的文档
不要用搜索引擎去搜索,没多少结果的,请直接看官网文档

采用的ELK/kafka版本

elasticsearch-2.x
logstash-2.3
kibana-4.5.1

Kafka 0.9.0.1

应用/网络 环境

Nginx机
10.0.0.1

Kafka群集
10.0.0.11
10.0.0.12
10.0.0.13

ElasticSearch机
10.0.0.21

整体说明

数据流向

日志/消息整体流向
logstash => kafka => logstash => elasticsearch => kibana

安装

elk所有安装都可以使用rpm二进制包的方式,增加elastic官网的仓库repo就可以用yum安装了

elasticsearch看这里
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-repositories.html

logstash看这里
https://www.elastic.co/guide/en/logstash/current/installing-logstash.html

kibana看这里
https://www.elastic.co/guide/en/kibana/current/setup.html

安装概览

nginx机 10.0.0.1
运行nginx的日志格式化为json
运行logstash输入input从nginx json,输出output到kafka

kafka群集 10.0.0.11 10.0.0.12 10.0.0.13
kafka群集Topic为logstash

elasticsearch机10.0.0.21
运行elasticsearch
运行logstash输入input从kafka,输出output到elasticsearch

Nginx机

nginx日志格式化为json

在nginx的 http{} 中定义一个名为logstash_json格式化,格式化日志为json

log_format logstash_json '{ "@timestamp": "$time_local", '
'"@fields": { '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"request_time": "$request_time", '
'"status": "$status", '
'"request": "$request", '
'"request_method": "$request_method", '
'"http_referrer": "$http_referer", '
'"body_bytes_sent":"$body_bytes_sent", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" } }';

在server{} 中增加记录logstash_json日志,可以用原有的日志输出共存

access_log /data/wwwlogs/iamle.log log_format;
access_log /data/wwwlogs/nginx_json.log logstash_json;

logstash日志采集配置

/etc/logstash/conf.d/nginx.conf

input {
file {
path => "/data/wwwlogs/nginx_json.log"
codec => "json"
}
}
filter {
mutate {
split => [ "upstreamtime", "," ]
}
mutate {
convert => [ "upstreamtime", "float" ]
}
}
output {
kafka {
bootstrap_servers => "10.0.0.11:9092"
topic_id => "logstash"
compression_type => "gzip"
}
}

Kafka群集

新建一个Topic

新建一个Topic叫做
logstash

Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为topic。(物理上不同topic的消息分开存储,逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处)

ElasticSearch机

logstash把数据从kafka存到elasticsearch的配置

其中选取kafka群集任意一个有zk的ip做连接使用
topic_id就是kafka中设置的topic logstash
/etc/logstash/conf.d/logstashes.conf

input {
kafka {
zk_connect => "10.0.0.13:2181"
topic_id => "logstash"
}
}
filter {
mutate {
split => [ "upstreamtime", "," ]
}
mutate {
convert => [ "upstreamtime", "float" ]
}
}
output {
elasticsearch {
hosts => ["10.0.0.21"]
index => "logstash-iamle-%{+YYYY.MM.dd}"
document_type => "iamle"
workers => 5
template_overwrite => true
}
}

补充说明

以上是主要的配置,就差kibana的查看/展示了

kibana

我这里kibana和elasticsearch是同一台机器
官方yum方式安装的kibana配置文件在
/opt/kibana/config/kibana.yml
需要改2个地方,监听端口和es的连接信息

server.host: "10.0.0.21"
elasticsearch.url: "http://10.0.0.21:9200"

启动kibana /etc/init.d/kibana start后可以通过 http://10.0.0.21:5601 访问

kibana的使用的多看官网文档,网上中文的资料不多,关于elk有一本饶琛琳写的
ELKstack 中文指南
https://www.gitbook.com/book/chenryn/kibana-guide-cn/details
kibana Discover 过滤静态文件
NOT \/static AND NOT \/upload\/

elasticsearch

官方yum方式安装的elasticsearch配置文件在
/etc/elasticsearch/elasticsearch.yml
需要配置下监听ip,默认是127.0.0.1

network.host: 10.0.0.21
path.data: /data

elasticsearch安装了head插件后可以看到es状态
http://10.0.0.21:9200/_plugin/head/

安全问题

特别要注意elk所有软件的端口监听,切勿暴露监听到公网上去,另外即便是内网你也得注意配置内网的访问限制

查看HTTP GET请求

sudo tcpdump -s 0 -A 'tcp dst port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

查看HTTP POST请求

sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

查看HTTP请求响应头以及数据

sudo tcpdump -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
sudo tcpdump -X -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

抓取mysql执行的sql语句

tcpdump -i eth1 -s 0 -l -w - dst  port 3306 | strings

抓取mysql通讯的网络包(cap用wireshark打开)

tcpdump -n -nn -tttt -i eth0 -s 65535 'port 3306' -w 20160505mysql.cap

各种远程抓包方法

tcpdump -v -i <INTERFACE> -s 0 -w /tmp/sniff.pcap port <PORT> # On the remote side
mkfifo /tmp/fifo; ssh-keygen; ssh-copyid root@remotehostaddress; sudo ssh root@remotehost "tshark -i eth1 -f 'not tcp port 22' -w -" > /tmp/fifo &; sudo wireshark -k -i /tmp/fifo;
ssh user@server.com sudo tcpdump -i eth0  -w - 'port 80'| /Applications/Wireshark.app/Contents/Resources/bin/wireshark -k -i -
ssh root@HOST tcpdump -iany -U -s0 -w - 'not port 22' | wireshark -k -i -

参考资料
analyze traffic remotely over ssh w/ wireshark